src/web/app/themes/atahualpa/js/ajaxupload.js
author ymh <ymh.work@gmail.com>
Wed, 04 Dec 2019 11:40:06 +0100
changeset 0 505fe5249d9c
permissions -rw-r--r--
add foundations for pharmakon (bedrock + deploy)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
/**
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
 * Ajax upload
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * Project page - http://valums.com/ajax-upload/
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * Copyright (c) 2008 Andris Valums, http://valums.com
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * Licensed under the MIT license (http://valums.com/mit-license/)
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * Version 3.6 (26.06.2009)
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 */
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
/**
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * Changes from the previous version:
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * 1. Fixed minor bug where click outside the button
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * would open the file browse window
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * 
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 * For the full changelog please visit: 
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * http://valums.com/ajax-upload-changelog/
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 */
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
(function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
var d = document, w = window;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
/**
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
 * Get element by id
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 */	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
function get(element){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
	if (typeof element == "string")
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
		element = d.getElementById(element);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
	return element;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
/**
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
 * Attaches event to a dom element
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
 */
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
function addEvent(el, type, fn){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
	if (w.addEventListener){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		el.addEventListener(type, fn, false);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
	} else if (w.attachEvent){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
		var f = function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
		  fn.call(el, w.event);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
		};			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
		el.attachEvent('on' + type, f)
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
	}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
/**
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
 * Creates and returns element from html chunk
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
 */
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
var toElement = function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
	var div = d.createElement('div');
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
	return function(html){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
		div.innerHTML = html;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
		var el = div.childNodes[0];
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
		div.removeChild(el);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
		return el;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
	}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
}();
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
function hasClass(ele,cls){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
function addClass(ele,cls) {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
	if (!hasClass(ele,cls)) ele.className += " "+cls;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
function removeClass(ele,cls) {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
	var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
	ele.className=ele.className.replace(reg,' ');
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
// getOffset function copied from jQuery lib (http://jquery.com/)
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
if (document.documentElement["getBoundingClientRect"]){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
	// Get Offset using getBoundingClientRect
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
	// http://ejohn.org/blog/getboundingclientrect-is-awesome/
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
	var getOffset = function(el){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
		var box = el.getBoundingClientRect(),
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
		doc = el.ownerDocument,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
		body = doc.body,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
		docElem = doc.documentElement,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
		// for ie 
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
		clientTop = docElem.clientTop || body.clientTop || 0,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
		clientLeft = docElem.clientLeft || body.clientLeft || 0,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
		// In Internet Explorer 7 getBoundingClientRect property is treated as physical,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
		// while others are logical. Make all logical, like in IE8.
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
		zoom = 1;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
		if (body.getBoundingClientRect) {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
			var bound = body.getBoundingClientRect();
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
			zoom = (bound.right - bound.left)/body.clientWidth;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
		}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
		if (zoom > 1){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
			clientTop = 0;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
			clientLeft = 0;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
		}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
		var top = box.top/zoom + (window.pageYOffset || docElem && docElem.scrollTop/zoom || body.scrollTop/zoom) - clientTop,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
		left = box.left/zoom + (window.pageXOffset|| docElem && docElem.scrollLeft/zoom || body.scrollLeft/zoom) - clientLeft;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
		return {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
			top: top,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
			left: left
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
		};
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
	}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
} else {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
	// Get offset adding all offsets 
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
	var getOffset = function(el){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
		if (w.jQuery){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
			return jQuery(el).offset();
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
		}		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		var top = 0, left = 0;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
		do {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
			top += el.offsetTop || 0;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
			left += el.offsetLeft || 0;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
		}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
		while (el = el.offsetParent);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
		return {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
			left: left,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
			top: top
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
		};
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
	}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
function getBox(el){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
	var left, right, top, bottom;	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
	var offset = getOffset(el);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
	left = offset.left;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
	top = offset.top;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
						
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
	right = left + el.offsetWidth;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
	bottom = top + el.offsetHeight;		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
	return {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
		left: left,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
		right: right,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
		top: top,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
		bottom: bottom
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
	};
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
/**
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
 * Crossbrowser mouse coordinates
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
 */
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
function getMouseCoords(e){		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
	// pageX/Y is not supported in IE
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
	// http://www.quirksmode.org/dom/w3c_cssom.html			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
	if (!e.pageX && e.clientX){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
		// In Internet Explorer 7 some properties (mouse coordinates) are treated as physical,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
		// while others are logical (offset).
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
		var zoom = 1;	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
		var body = document.body;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
		if (body.getBoundingClientRect) {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
			var bound = body.getBoundingClientRect();
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
			zoom = (bound.right - bound.left)/body.clientWidth;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
		}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
		return {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
			x: e.clientX / zoom + d.body.scrollLeft + d.documentElement.scrollLeft,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
			y: e.clientY / zoom + d.body.scrollTop + d.documentElement.scrollTop
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
		};
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
	}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
	return {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
		x: e.pageX,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
		y: e.pageY
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
	};		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
/**
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
 * Function generates unique id
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
 */		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
var getUID = function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
	var id = 0;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
	return function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
		return 'ValumsAjaxUpload' + id++;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
	}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
}();
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
function fileFromPath(file){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
	return file.replace(/.*(\/|\\)/, "");			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
function getExt(file){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
	return (/[.]/.exec(file)) ? /[^.]+$/.exec(file.toLowerCase()) : '';
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
}			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
// Please use AjaxUpload , Ajax_upload will be removed in the next version
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
Ajax_upload = AjaxUpload = function(button, options){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
	if (button.jquery){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
		// jquery object was passed
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
		button = button[0];
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
	} else if (typeof button == "string" && /^#.*/.test(button)){					
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
		button = button.slice(1);				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
	}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
	button = get(button);	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
	this._input = null;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
	this._button = button;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
	this._disabled = false;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
	this._submitting = false;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
	// Variable changes to true if the button was clicked
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
	// 3 seconds ago (requred to fix Safari on Mac error)
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
	this._justClicked = false;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
	this._parentDialog = d.body;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
	if (window.jQuery && jQuery.ui && jQuery.ui.dialog){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
		var parentDialog = jQuery(this._button).parents('.ui-dialog');
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
		if (parentDialog.length){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
			this._parentDialog = parentDialog[0];
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
		}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
	}			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
					
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
	this._settings = {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
		// Location of the server-side upload script
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
		action: 'upload.php',			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
		// File upload name
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
		name: 'userfile',
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
		// Additional data to send
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
		data: {},
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
		// Submit file as soon as it's selected
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
		autoSubmit: true,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
		// The type of data that you're expecting back from the server.
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
		// Html and xml are detected automatically.
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
		// Only useful when you are using json data as a response.
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
		// Set to "json" in that case. 
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
		responseType: false,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
		// When user selects a file, useful with autoSubmit disabled			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
		onChange: function(file, extension){},					
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
		// Callback to fire before file is uploaded
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
		// You can return false to cancel upload
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
		onSubmit: function(file, extension){},
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
		// Fired when file upload is completed
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
		// WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE!
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
		onComplete: function(file, response) {}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
	};
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
	// Merge the users options with our defaults
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
	for (var i in options) {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
		this._settings[i] = options[i];
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
	}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
	this._createInput();
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
	this._rerouteClicks();
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
// assigning methods to our class
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
AjaxUpload.prototype = {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
	setData : function(data){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
		this._settings.data = data;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
	},
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
	disable : function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
		this._disabled = true;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
	},
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
	enable : function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
		this._disabled = false;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
	},
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
	// removes ajaxupload
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
	destroy : function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
		if(this._input){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
			if(this._input.parentNode){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
				this._input.parentNode.removeChild(this._input);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
			}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
			this._input = null;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
		}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
	},				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
	/**
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
	 * Creates invisible file input above the button 
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
	 */
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
	_createInput : function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
		var self = this;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
		var input = d.createElement("input");
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
		input.setAttribute('type', 'file');
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
		input.setAttribute('name', this._settings.name);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
		var styles = {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
			'position' : 'absolute'
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
			,'margin': '-5px 0 0 -175px'
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
			,'padding': 0
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
			,'width': '220px'
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
			,'height': '30px'
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
			,'fontSize': '14px'								
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
			,'opacity': 0
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
			,'cursor': 'pointer'
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
			,'display' : 'none'
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
			,'zIndex' :  2147483583 //Max zIndex supported by Opera 9.0-9.2x 
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
			// Strange, I expected 2147483647					
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
		};
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
		for (var i in styles){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
			input.style[i] = styles[i];
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
		}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
		// Make sure that element opacity exists
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
		// (IE uses filter instead)
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
		if ( ! (input.style.opacity === "0")){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
			input.style.filter = "alpha(opacity=0)";
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
		}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
							
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
		this._parentDialog.appendChild(input);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
		addEvent(input, 'change', function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
			// get filename from input
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
			var file = fileFromPath(this.value);	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
			if(self._settings.onChange.call(self, file, getExt(file)) == false ){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
				return;				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
			}														
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
			// Submit form when value is changed
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
			if (self._settings.autoSubmit){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
				self.submit();						
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
			}						
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
		});
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
		// Fixing problem with Safari
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
		// The problem is that if you leave input before the file select dialog opens
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
		// it does not upload the file.
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
		// As dialog opens slowly (it is a sheet dialog which takes some time to open)
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
		// there is some time while you can leave the button.
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
		// So we should not change display to none immediately
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
		addEvent(input, 'click', function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
			self.justClicked = true;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
			setTimeout(function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
				// we will wait 3 seconds for dialog to open
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
				self.justClicked = false;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
			}, 2500);			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
		});		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
		this._input = input;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
	},
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
	_rerouteClicks : function (){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
		var self = this;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
		// IE displays 'access denied' error when using this method
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
		// other browsers just ignore click()
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
		// addEvent(this._button, 'click', function(e){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
		//   self._input.click();
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
		// });
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
		var box, dialogOffset = {top:0, left:0}, over = false;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
									
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
		addEvent(self._button, 'mouseover', function(e){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
			if (!self._input || over) return;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
			over = true;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
			box = getBox(self._button);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
					
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
			if (self._parentDialog != d.body){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
				dialogOffset = getOffset(self._parentDialog);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
			}	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
		});
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
		// We can't use mouseout on the button,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
		// because invisible input is over it
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
		addEvent(document, 'mousemove', function(e){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
			var input = self._input;			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
			if (!input || !over) return;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
			if (self._disabled){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
				removeClass(self._button, 'hover');
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
				input.style.display = 'none';
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
				return;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
			}	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
										
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
			var c = getMouseCoords(e);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
			if ((c.x >= box.left) && (c.x <= box.right) && 
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
			(c.y >= box.top) && (c.y <= box.bottom)){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
							
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
				input.style.top = c.y - dialogOffset.top + 'px';
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
				input.style.left = c.x - dialogOffset.left + 'px';
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
				input.style.display = 'block';
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
				addClass(self._button, 'hover');
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
								
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
			} else {		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
				// mouse left the button
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
				over = false;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
				var check = setInterval(function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
					// if input was just clicked do not hide it
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
					// to prevent safari bug
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
					 
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
					if (self.justClicked){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
						return;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
					}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
					
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
					if ( !over ){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
						input.style.display = 'none';	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
					}						
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
					clearInterval(check);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
				}, 25);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
					
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
				removeClass(self._button, 'hover');
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
			}			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
		});			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
	},
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
	/**
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
	 * Creates iframe with unique name
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
	 */
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
	_createIframe : function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
		// unique name
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
		// We cannot use getTime, because it sometimes return
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
		// same value in safari :(
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
		var id = getUID();
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
		// Remove ie6 "This page contains both secure and nonsecure items" prompt 
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
		// http://tinyurl.com/77w9wh
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
		var iframe = toElement('<iframe src="javascript:false;" name="' + id + '" />');
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
		iframe.id = id;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
		iframe.style.display = 'none';
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
		d.body.appendChild(iframe);			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
		return iframe;						
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
	},
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
	/**
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
	 * Upload file without refreshing the page
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
	 */
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
	submit : function(){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
		var self = this, settings = this._settings;	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
					
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
		if (this._input.value === ''){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
			// there is no file
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
			return;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
		}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
										
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
		// get filename from input
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
		var file = fileFromPath(this._input.value);			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
		// execute user event
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
		if (! (settings.onSubmit.call(this, file, getExt(file)) == false)) {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
			// Create new iframe for this submission
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
			var iframe = this._createIframe();
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
			// Do not submit if user function returns false										
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
			var form = this._createForm(iframe);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
			form.appendChild(this._input);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
			form.submit();
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
			d.body.removeChild(form);				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
			form = null;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
			this._input = null;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
			// create new input
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
			this._createInput();
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
			var toDeleteFlag = false;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
			addEvent(iframe, 'load', function(e){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
					
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
				if (// For Safari
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
					iframe.src == "javascript:'%3Chtml%3E%3C/html%3E';" ||
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
					// For FF, IE
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
					iframe.src == "javascript:'<html></html>';"){						
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
					
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
					// First time around, do not delete.
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
					if( toDeleteFlag ){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
						// Fix busy state in FF3
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
						setTimeout( function() {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
							d.body.removeChild(iframe);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
						}, 0);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
					}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
					return;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
				}				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
				var doc = iframe.contentDocument ? iframe.contentDocument : frames[iframe.id].document;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
				// fixing Opera 9.26
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
				if (doc.readyState && doc.readyState != 'complete'){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
					// Opera fires load event multiple times
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
					// Even when the DOM is not ready yet
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
					// this fix should not affect other browsers
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
					return;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
				}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
				// fixing Opera 9.64
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
				if (doc.body && doc.body.innerHTML == "false"){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
					// In Opera 9.64 event was fired second time
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
					// when body.innerHTML changed from false 
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
					// to server response approx. after 1 sec
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
					return;				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
				}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
				var response;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
									
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
				if (doc.XMLDocument){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
					// response is a xml document IE property
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
					response = doc.XMLDocument;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
				} else if (doc.body){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
					// response is html document or plain text
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
					response = doc.body.innerHTML;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
					if (settings.responseType && settings.responseType.toLowerCase() == 'json'){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
						// If the document was sent as 'application/javascript' or
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
						// 'text/javascript', then the browser wraps the text in a <pre>
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
						// tag and performs html encoding on the contents.  In this case,
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
						// we need to pull the original text content from the text node's
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
						// nodeValue property to retrieve the unmangled content.
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
						// Note that IE6 only understands text/html
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
						if (doc.body.firstChild && doc.body.firstChild.nodeName.toUpperCase() == 'PRE'){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
							response = doc.body.firstChild.firstChild.nodeValue;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
						}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
						if (response) {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
							response = window["eval"]("(" + response + ")");
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
						} else {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
							response = {};
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
						}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
					}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
				} else {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
					// response is a xml document
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
					var response = doc;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
				}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
																			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
				settings.onComplete.call(self, file, response);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
						
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
				// Reload blank page, so that reloading main page
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
				// does not re-submit the post. Also, remember to
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
				// delete the frame
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
				toDeleteFlag = true;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
				// Fix IE mixed content issue
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
				iframe.src = "javascript:'<html></html>';";		 								
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
			});
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
		} else {
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
			// clear input to allow user to select same file
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
			// Doesn't work in IE6
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
			// this._input.value = '';
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
			d.body.removeChild(this._input);				
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
			this._input = null;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
			// create new input
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
			this._createInput();						
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
		}
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
	},		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
	/**
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
	 * Creates form, that will be submitted to iframe
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
	 */
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
	_createForm : function(iframe){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
		var settings = this._settings;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
		// method, enctype must be specified here
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
		// because changing this attr on the fly is not allowed in IE 6/7		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
		var form = toElement('<form method="post" enctype="multipart/form-data"></form>');
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
		form.style.display = 'none';
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
		form.action = settings.action;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
		form.target = iframe.name;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
		d.body.appendChild(form);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
		
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
		// Create hidden input element for each data key
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
		for (var prop in settings.data){
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
			var el = d.createElement("input");
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
			el.type = 'hidden';
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
			el.name = prop;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
			el.value = settings.data[prop];
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
			form.appendChild(el);
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
		}			
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
		return form;
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
	}	
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
};
505fe5249d9c add foundations for pharmakon (bedrock + deploy)
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
})();