var Cookie = {
  set : function(name,value,days){
    if(days){
      var date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      var expires = "; expires="+date.toGMTString();
    }else{
      var expires = "";
    }
    document.cookie = name+"="+value+expires+"; path=/";
  },
  get : function(name){
    name += "=";
    var s = document.cookie.split("; ");
    for(var i = 0; i < s.length; i++){
      var c = s[i];
      if(c.indexOf(name) == 0){
        return unescape(c.substring(name.length,c.length));
      }
    }
    return null;
  },
  erase : function(name){
    this.set(name,"",-1);
  },
  enabled : function(){
    this.set("cookietest","cookietest");
    return this.get("cookietest") != null;
  }
};

var inspectObject = function(obj) {
	var str = "";
	for (var i in obj) {
		str += i + ": " + obj[i] + "\n";
	}
	return str;
};

var Uploader = {
	usDiv: "singleFileUpload",
	usFilename: "usFilename",
	usProgress: "usProgress",
	usPercent: "usPercent",
	usInfo: "usInfo",
	usFile: false,
	effect: false,
	totalSize: 0,
	fileArr: new Array(),
	init: function(multiple) {
		$("filename").value = '|_|';
		this.multiple = multiple;
		mmSWFUpload.init({
			upload_backend : "/?action=upload" + SESS,
			target : "SWFUpload",
			cssClass : "SWFUploadLink",
			allowed_filesize : "400000000",
			allowed_filetypes : "*.gif;*.jpg;*.png;*.bmp",
			upload_start_callback : this.start,
			upload_progress_callback : this.progress,
			upload_complete_callback : this.complete,
			upload_error_callback : 'uploadError',
			upload_cancel_callback : 'uploadCancel',
			upload_queue_complete_callback : this.fullComplete
		});
		this.progressWidth = Element.getDimensions("main").width - 34;
		//Element.setOpacity(this.usDiv, 0);
		//Element.hide(this.usDiv);
	},
	start: function(fileObj) {
		Uploader.setStart(fileObj);
	},
	setStart: function(fileObj) {
		//if(this.usFile) return;
		//this.usFile = fileObj.name;
		
		this.totalSize += fileObj.size;
		var curIndex = this.fileArr.length;
		if((this.totalSize > 20000000) || (curIndex > 19)) {
			var curNum = curIndex - 1;
			$("usStatus_" + curNum).innerHTML = "Some of your files are skipped. Cause they exceed the limits.";
			
			//new Effect.BlindDown("usStatus_" + curNum, { duration: .5 });
			$("usStatus_" + curNum).show().morph("color: #800");
			return;
		}
		this.fileArr[this.fileArr.length] = fileObj;
		var current = '<div class="usInner" id="usInner_' + curIndex + '">'+
						'<div class="usFilename" id="usFilename_' + curIndex + '"></div>'+
						'<div class="usProgress" id="usProgress_' + curIndex + '">'+
							'<div class="usPercent" id="usPercent_' + curIndex + '">0%</div>'+
						'</div>'+
						'<div class="usInfo" id="usInfo_' + curIndex + '"></div>'+
						'<div class="usStatus" id="usStatus_' + curIndex + '" style="display:none;"></div>'+
					'</div>';
		new Insertion.Bottom("singleFileUpload", current);
		Effect.BlindDown('usInner_' + curIndex, { duration: .5 });
		Effect.Appear ('usInner_' + curIndex, { duration: .9 });
		$('usStatus_' + curIndex).hide();
		$('usInfo_' + curIndex).innerHTML = "0kb of " + (Math.ceil(fileObj.size / 1024)) + "kb";
		$('usFilename_' + curIndex).innerHTML = fileObj.name;
		
	},
	progress: function(fileObj, bytesLoaded) {
		Uploader.setProgress(fileObj, bytesLoaded);
	},
	searchFile: function(fileObj) {
		for(var i = 0; i < this.fileArr.length; i++) {
			if(this.fileArr[i].name == fileObj.name) {
				return i;
			}
		}
		return -1;
	},
	setProgress: function(fileObj, bytesLoaded) {
		var curNum = this.searchFile(fileObj);	
		this.percent = bytesLoaded / fileObj.size;
		if(this.effect && this.effect.cancel) { this.effect.cancel(); }
		this.effect = new Effect.Morph('usProgress_' + curNum,{ style:'width:' + Math.ceil(this.progressWidth * this.percent) + 'px',  duration: .5});
		//this.effect = new Effect.Transform([{'#usProgress': ('width:' + Math.ceil(this.progressWidth * this.percent) + 'px')}], { duration: .5 });			
		//this.effect.play();
		$('usPercent_' + curNum).innerHTML = Math.floor(1000 * this.percent) / 10 + '%';
		$('usInfo_' + curNum).innerHTML = (Math.ceil(fileObj.size / 1024 * this.percent)) + "kb" + " of " + (Math.ceil(fileObj.size / 1024)) + "kb";	
	},
	complete: function(fileObj) {
		Uploader.setComplete(fileObj);
	},
	setComplete: function(fileObj) {
		var curNum = this.searchFile(fileObj);
		$("filename").value = $("filename").value + fileObj.name + '|_|';
		$("usProgress_" + curNum).morph("background: #080;");
		this.effect = new Effect.Morph('usProgress_' + curNum,{ style:'width:' + Math.ceil(this.progressWidth) + 'px',  duration: .5});
		//$("usStatus_" + curNum).innerHTML = "File successfully uploaded.";
		//new Effect.BlindDown("usStatus_" + curNum, { duration: .5 });
		//$("usStatus_" + curNum).morph("color: #080");
		$("usFilename_" + curNum).morph("color: #080");
		$('usPercent_' + curNum).innerHTML = '100%';
		$('usInfo_' + curNum).innerHTML = (Math.ceil(fileObj.size / 1024)) + "kb" + " of " + (Math.ceil(fileObj.size / 1024)) + "kb";
		new Effect.ScrollTo("usFilename_" + curNum, { duration: .5 });
	},
	fullComplete: function(fileObj) {
		Uploader.setFullComplete(fileObj);
	},
	setFullComplete: function(fileObj) {
		new Effect.Fade("uploadShit");
		new Effect.BlindDown("step3", { duration: .9 });
		new Effect.Appear("step3", { duration: .9, afterFinish: function() {
			usResizePercentSlider = new Control.Slider('usResizePercentHandle','usResizePercentTrack',{alignX: -10, range: $R(0,100), onSlide: function(v){ updateSliderValue("usResizePercent", v); }, onChange: function(v){ updateSliderValue("usResizePercent", v); }});
			usResizePixelsSlider = new Control.Slider('usResizePixelsHandle','usResizePixelsTrack',{alignX: -10, values:[320, 640, 800, 1024, 1280], range: $R(320, 1280), onSlide: function(v){ updateSliderValue("usResizePixels", v); }, onChange: function(v){ updateSliderValue("usResizePixels", v); }});
			usResizeQualitySlider = new Control.Slider('usResizeQualityHandle','usResizeQualityTrack',{alignX: -10, range: $R(50,90), onSlide: function(v){ updateSliderValue("usResizeQuality", v); }, onChange: function(v){ updateSliderValue("usResizeQuality", v); }});
			usResizeRotationSlider = new Control.Slider('usResizeRotationHandle','usResizeRotationTrack',{alignX: -10, values:[-90, 0, 90, 180], range: $R(-90,180), onSlide: function(v){ updateSliderValue("usResizeRotation", v); }, onChange: function(v){ updateSliderValue("usResizeRotation", v); }});
			usResizeThumbSlider = new Control.Slider('usResizeThumbHandle','usResizeThumbTrack',{ alignX: -10, range: $R(50,300), onSlide: function(v){ updateSliderValue("usResizeThumb", v); }, onChange: function(v){ updateSliderValue("usResizeThumb", v); }});
			
			
			usResizeQualitySlider.setValue(Cookie.get("usResizeQualityValue") ? Cookie.get("usResizeQualityValue") : 75);
			usResizePixelsSlider.setValue(Cookie.get("usResizePixelsValue") ? Cookie.get("usResizePixelsValue") : 800);
			usResizePercentSlider.setValue(Cookie.get("usResizePercentValue") ? Cookie.get("usResizePercentValue") : 50);
			usResizeRotationSlider.setValue(Cookie.get("usResizeRotationValue") ? Cookie.get("usResizeRotationValue") : 0);
			usResizeThumbSlider.setValue(Cookie.get("usResizeThumbValue") ? Cookie.get("usResizeThumbValue") : 150);

			sliderOverEffects("usResizePercent");
			sliderOverEffects("usResizePixels");
			sliderOverEffects("usResizeQuality");
			sliderOverEffects("usResizeRotation");
			sliderOverEffects("usResizeThumb");
				new Effect.ScrollTo("step3", { duration: .9 });
				setTimeout(function() {
				var arr = $("radioSelect").getElementsByTagName("tr");
				var downCheck = false;
				for (var i = 0; i < arr.length; i++) {
					arr[i].onmousedown = function() {
						if(this.selected) return;
						for(var i = 0; i < this.parentNode.childNodes.length; i++) {
							var cur = this.parentNode.childNodes[i];
							if(cur.selected) {
								var obj = cur.getElementsByTagName("td")[1].getElementsByTagName("div")[0];
								new Effect.Opacity(obj, { to: .4, duration: .5 });
								cur.getElementsByTagName("td")[0].getElementsByTagName("input")[0].checked = false;
								cur.selected = false;
								obj.disabled = true;
							}
						}
						this.selected = true;
						var obj = this.getElementsByTagName("td")[1].getElementsByTagName("div")[0];
						new Effect.Opacity(obj, { to: 1, duration: .5 });
						this.getElementsByTagName("td")[0].getElementsByTagName("input")[0].checked = true;
						obj.disabled = false;
					}
					var obj = arr[i].getElementsByTagName("td")[1].getElementsByTagName("div")[0];
					new Effect.Opacity(obj, { to: .4, duration: .5 });
					obj.disabled = true;
					if(arr[i].getElementsByTagName("td")[0].getElementsByTagName("input")[0].checked) {
						arr[i].onmousedown();
						downCheck = true;
					}
				}
				if(!downCheck) {
					setTimeout(function() { arr[0].onmousedown(); }, 600);
				}
				$("usThumb").onclick = function() {
					if(this.checked) {
						new Effect.Opacity("usResizeThumb", { to: 1, duration: .5 });
						$("usResizeThumb").disabled = false;
					} else {
						new Effect.Opacity("usResizeThumb", { to: .4, duration: .5 });
						$("usResizeThumb").disabled = true;
					}
				}
				$("usThumb").onclick();
			}, 500);	
		}});
	},
	error: function(fileObj) {
		Uploader.setError(fileObj);
	},
	setError: function(fileObj) {
		alert("jopa");
		$("usStatus").innerHTML = "Error occured :(";
		Effect.BlindDown("usStatus", { duration: .5 });
		$("usStatus").morph("color: #800");
	}
}



uploadQueueComplete = function(fileObj) {
	//alert("Queue done!");
}

uploadCancel = function() {
	//alert("You pressed cancel!");
	$("SWFUpload").ih();
}



var updateSliderValue = function(id, v) {
	$$('#' + id + 'Text span')[0].innerHTML = Math.round(v);
	$(id + 'Value').value = Math.round(v);
}
var sliderOverEffects = function(id) {
	$(id).onmouseover = function() {
		Element.addClassName(this, "sliderOver");
	}
	$(id).onmouseout = function() {
		Element.removeClassName(this, "sliderOver");
	}
}