/* ======================= ARRAY SHIT ======================= */

Array.prototype.deleteItem = function(num){
  var len = this.length;
  var temp_var = new Array();
  for (var i = 0; i < num; i++)
  {
	temp_var[i] = this[i];
  }
  for (var i = (num + 1); i < len; i++)
  {
	 temp_var[i-1] = this[i]
  }
  return temp_var; 
}

function print_r(arr){
  text = "";
  for (var i=0; i<arr.length; i++)
  {
	text += i + "\n\t\t";
	for (j in arr[i])
	{
		text += arr[i][j] + "\n";
	}
	
  }
  alert(text);
  return; 
}

/* ======================= BLUR LINKS (onload) ======================= */

function blurAnchors(){
  if(document.getElementsByTagName){
    var a = document.getElementsByTagName("a");
    for(var i = 0; i < a.length; i++){
      a[i].onfocus = function(){this.blur()};
    }
  }
}

/* ======================= COOKIE CLASS ======================= */

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;
  }
};

/* ======================= WINDOW LISTENER ======================= */

var WindowListener = {
  add : function(event,func){
    var e = this.Functions[event];
    e[func] = func;
  },
  remove : function(event,func){
    var e = this.Functions[event];
    delete e[func];
  },
  addEvent : function(event){
    window["on"+event] = function(){WindowListener.run(event)};
    this.Functions[event] = {};
  },
  removeEvent : function(event){
    window["on"+event] = null;
    delete this.Functions[event];
  },
  run : function(event){
    var e = this.Functions[event];
    for(var i in e) eval(e[i]);
  },
  Functions : {}
};




function fixE(e) {
	if (typeof e == 'undefined') e = window.event;
	return e;
}


var attachInputEffects = function(obj) {
	Selector.findChildElements($(obj), $A(new Array("input[type=password]", "input[type=text]", "textarea"))).each(function(item){
		item.onfocus = function() {
			new Effect.Morph(this,{ style:'color: #000; border-color: #56687C; background-color: #C1CBFF;', duration: .3 });
		}
		item.onblur = function() {
			new Effect.Morph(this,{ style:'color: #333; border-color: #8395A9; background-color: #F8F9FF;', duration: .3 });
		}
	});
}




var blurLinks = function(obj) {
	$A($(obj).getElementsByTagName("A")).each(function(item){
		item.onfocus = function() {
			this.blur();
		}
	});
}

var reloadAjaxPage = function() {
	new Ajax.Updater("main", AJAX_URL, { noHistory : true });
}

var initHistory = function() {
	dhtmlHistory.initialize();
	dhtmlHistory.addListener(handleHistoryChange);
	if (dhtmlHistory.isFirstLoad()) {
	}
}

var handleHistoryChange = function(newLocation, historyData) {
	if(newLocation) {
		new Ajax.Updater("main", BASE_HREF + "/" + newLocation, { noHistory : true });
		if(window.MODAL_ID) destroyModalDiv(window.MODAL_ID);
	}
}
var alignObj = function(obj) {
	obj = $(obj);
	var wh = (document.documentElement.clientHeight != "undefined") ? document.documentElement.clientHeight : window.innerHeight;
	var ww = (document.documentElement.clientWidth != "undefined") ? document.documentElement.clientWidth  : window.innerWidth;

	var w = Element.getDimensions(obj).width;
	var h = Element.getDimensions(obj).height;

	//alert(Math.max(20, parseInt((ww - w)/2)) + "px" + " | " + h);
	obj.style.left    = Math.max(20, parseInt((ww - w)/2))  + "px";
	obj.style.top     = Math.max(20, parseInt((wh - h)/2))  + "px";
}

//ALERT BOX !!!
blockingShadow = null;

var createBlockingShadow = function() {
	var shadow = document.createElement("div");
	shadow.className = shadow.id = "blockingShadow";
	document.body.appendChild(shadow);
	var wh = (document.documentElement.clientHeight != "undefined") ? document.documentElement.clientHeight : window.innerHeight;
	var ww = (document.documentElement.clientWidth != "undefined") ? document.documentElement.clientWidth  : window.innerWidth;
	wh = Math.max(Element.getDimensions(document.body).height, wh);
	ww = Math.max(Element.getDimensions(document.body).width, ww);
	$(shadow.id).style.width = ww + "px";
	$(shadow.id).style.height = wh + "px";
	$(shadow.id).setOpacity(0);
	$(shadow.id).style.display = "block";
	blockingEffect = new Effect.Opacity(shadow, { to: .9, duration: .5 });
	blockingShadow = true;
}
var removeBlockingShadow = function() {
	if(blockingEffect && blockingEffect.cancel) blockingEffect.cancel(); 
	new Effect.Opacity("blockingShadow", { to: 0, duration: .5, afterFinish: function() {
		document.body.removeChild($("blockingShadow"));
		blockingShadow = false;
	}});
}

GLOBAL_MODAL_ID = "modalDiv";
MODAL_ID = false;
var createModalDiv = function(obj) {
	if(MODAL_ID) return;
	createBlockingShadow();
	if(!obj) {
		removeBlockingShadow();
		return;
	}
	if(obj && obj.url) {
		//alert(GLOBAL_MODAL_ID + " ! " + obj.url);
		WindowListener.add("resize", "alignObj('" + GLOBAL_MODAL_ID + "');");
		new Ajax.Updater(GLOBAL_MODAL_ID, obj.url, { onComplete : function() {
			assignModalButtons(obj);
			appearModalDiv();
		} });
	} else {
		$(GLOBAL_MODAL_ID).innerHTML = "<h2 class='modalHandle' id='modalHandle'>" + obj.title + "</h2><div class='pad10 bgwhite'>" + obj.text + "</div>";
		assignModalButtons(obj);
		appearModalDiv();
	}
	
	new Effect.ScrollTo(document.body, { to: 0 });
	window.MODAL_ID = GLOBAL_MODAL_ID;
	
}
var appearModalDiv = function() {
	$(GLOBAL_MODAL_ID).setOpacity(1);
	$(GLOBAL_MODAL_ID).style.display = "block";
	w = Element.getDimensions($(GLOBAL_MODAL_ID)).width;
	$(GLOBAL_MODAL_ID).style.width = ((w < 200) ? 200 : w) + "px";
	alignObj(GLOBAL_MODAL_ID);
	new Effect.Opacity($(GLOBAL_MODAL_ID), {to: 1, duration: .5 });
} 
var assignModalButtons = function(obj) {
	var h2 = $(GLOBAL_MODAL_ID).getElementsByTagName("h2");
	if(h2[0]) {
		h2[0].onclick = null;
		setTimeout(function(){ new Draggable(GLOBAL_MODAL_ID, { zindex : 100000, handle : "modalHandle", starteffect: false, endeffect: false, snap: function(x,y,draggable) {
			  function constrain(n, lower, upper) {
				if (n > upper) return upper;
				else if (n < lower) return lower;
				else return n;
			  }
			 
			  element_dimensions = Element.getDimensions(draggable.element);
			  parent_dimensions = Element.getDimensions($("blockingShadow"));
			  return[
				constrain(x, 0, parent_dimensions.width - element_dimensions.width),
				constrain(y, 0, parent_dimensions.height - element_dimensions.height)];
		} }); }, 100);
	}
	if(obj.buttonOk || obj.buttonCancel) {
		$(GLOBAL_MODAL_ID).innerHTML += "<div class='text_center bgwhite' id='modalButtonDiv'></div>";
		if(obj.buttonOk) {
			$("modalButtonDiv").innerHTML += "&nbsp;<input type='button' class='submit' id='modalButtonOk' value='Ok'/>&nbsp;";
			setTimeout(function() {
				$("modalButtonOk").onclick = function() {
					if(obj.callback) {
						obj.callback(true);
					}
					destroyModalDiv();
					return false;
				}
			}, 100);
		}
		if(obj.buttonCancel) {
			$("modalButtonDiv").innerHTML += "&nbsp;<input type='button' class='submit' id='modalButtonCancel' value='Cancel'/>&nbsp;";
			setTimeout(function() {
				$("modalButtonCancel").onclick = function() {
					if(obj.callback) {
						obj.callback(false);
					}
					destroyModalDiv();
					return false;
				}
			}, 150);
		}
	}
}
var destroyModalDiv = function(id) { 
	id = GLOBAL_MODAL_ID;
	removeBlockingShadow(); 
	new Effect.Fade(id, { duration: .5 });
	window.MODAL_ID = false;
}

var reloadAjaxPage = function() {
	new Ajax.Updater("main", AJAX_URL, { noHistory : true });
}

var getBgColor = function(start, end, num, range) {
	var OBJ = new Object();
	OBJ.START_COLOR = start;
	OBJ.END_COLOR = end;
	OBJ.colors_base = [
		parseInt(OBJ.START_COLOR.slice(1,3),16),
		parseInt(OBJ.START_COLOR.slice(3,5),16),
		parseInt(OBJ.START_COLOR.slice(5),16) ];
	OBJ.colors_delta = [
		parseInt(OBJ.END_COLOR.slice(1,3),16)-OBJ.colors_base[0],
		parseInt(OBJ.END_COLOR.slice(3,5),16)-OBJ.colors_base[1],
		parseInt(OBJ.END_COLOR.slice(5),16)-OBJ.colors_base[2]];
	var position = num / range;
	OBJ.COLORS = $R(0,2).map( function(i){ 
		return Math.round(OBJ.colors_base[i]+(OBJ.colors_delta[i]*position))
	});
	return "#" + OBJ.COLORS[0].toColorPart() + OBJ.COLORS[1].toColorPart() + OBJ.COLORS[2].toColorPart();
}

var getAbsolutePos = function(el) {
	var SL = 0, ST = 0;
	var is_div = /^div$/i.test(el.tagName);
	if (is_div && el.scrollLeft)
		SL = el.scrollLeft;
	if (is_div && el.scrollTop)
		ST = el.scrollTop;
	var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
	if (el.offsetParent) {
		var tmp = getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
}

getData = Class.create();
getData.prototype = {
	initialize: function(element, options) {
		this.element = $(element);
		//alert(element + " ! " + this.element);
		this.setOptions(options);
		this.initEvents();
	},
	initEvents: function() {
		this.element.getElementsBySelector(".sort").each((function(item){
			//alert(this.item);
			Event.observe(item, "click", this.headerClick.bindAsEventListener(this));
		}).bind(this));
	},
	currentHeader: false,
	headerClick: function(evt, item) {
		if(evt) {
			var item = Event.findElement(evt, "th");
		}
		//createModalDiv({ title: "ID", text: item.id, buttonOk: true });
		var order = item.id.substring(5);
		if(item != this.currentHeader) {
			if(this.currentHeader) {
				this.currentHeader.removeClassName("sortDESC").removeClassName("sortASC");
			}
		} else {
			item.removeClassName("sortDESC").removeClassName("sortASC");
		}
		this.setSorting(order, ((this.options.dir == "ASC") ? "DESC" : "ASC"));
		this.setPaging(0);
		item.addClassName("sort" + this.options.dir);
		this.currentHeader = item;
		this.request();
	},
	setOptions: function(options) {
		this.options = {
			sql: '',
			table: '',
			filters: '',
			order: 'id',
			dir: 'ASC',
			onpage: 10,
			page: 0,
			outputParams: '',
			countSql: 'COUNT(*) as num',
			DB: 'acm',
			callback: function() {}
		}
		Object.extend(this.options, options || {});
	},
	setPaging: function(page, onpage) {
		if(page)   this.options.page = page;
		if(onpage) this.options.onpage = onpage;
	},
	setSorting: function(order, dir) {
		if(order) this.options.order = order;
		if(dir)   this.options.dir = dir;
	},
	clearFilters: function() {
		this.options.filters = "";
		this.options.page = 0;
		this.options.table = "";
	},
	addFilter: function(filter) {
		this.options.filters += " AND " + filter;
	},
	addTable: function(table) {
		this.options.table += ", " + table;
	},
	request: function() {
		Position.prepare(); //deltaY getDimensions
		$(this.element.id + "Loading").setOpacity(0);
		$(this.element.id + "Loading").setStyle({ width: this.element.getDimensions().width + "px", height: this.element.getDimensions().height  + "px", top: getAbsolutePos(this.element).y + "px", left: getAbsolutePos(this.element).x + "px" });
		new Effect.Opacity($(this.element.id + "Loading"), {to : .8, duration: .7});
		
		new Ajax.Request("/index.php?", { parameters: "action=_get_data&VALUE[DB]=" + this.options.DB + "&VALUE[sql]=" + this.options.sql + "&VALUE[order]=" + this.options.order + "&VALUE[dir]=" + this.options.dir + "&VALUE[onpage]=" + this.options.onpage + "&VALUE[page]=" + this.options.page + "&VALUE[outputParams]=" + this.options.outputParams + "&VALUE[filters]=" + this.options.filters + "&VALUE[table]=" + this.options.table + "&VALUE[countSql]=" + this.options.countSql + "&VALUE[id]=" + this.element.id, onSuccess: this.complete.bind(this) });
	},
	removeLoading: function() {
		$(this.element.id + "Loading").setStyle({ width: 0, height: 0 });
	},
	complete: function(response) {
		new Effect.Opacity($(this.element.id + "Loading"), {to : 0, duration: .7, afterFinish: this.removeLoading.bind(this)});
		$A(this.element.getElementsByTagName("TR")).each(function(item, counter){
			if(counter) {
				item.parentNode.removeChild(item);
			}
		});
		
		//-------------vitaliy 06.09.2010------------------------
		//new Insertion.BottomIE(this.element, response.responseText);
		//alert("yo!");
		if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
		{
			//response contains divs not tr/td
			//alert(response.responseText);
			//new Insertion.BottomIE(this.element, response.responseText);
			//alert(this.element);
			$j(this.element).append('<tr>'+response.responseText);
		}
		else
		{
		//alert(response.responseText);
		new Insertion.Bottom(this.element, response.responseText);
		}
		
		//-----------------end vitaliy----------------------------
		//alert("!!");
		setTimeout((function() {
			$A(this.element.getElementsByTagName("a")).each(function(item){
				item.onclick = function() {
					new Ajax.Updater("main", this.href);
					return false;
				}
			});
			//alert("!!2");
			$("pages_" + this.element.id).innerHTML = OUTPAGE;
			//alert("!!3");
			if(this.element.getElementsByTagName("caption")[0])
			this.element.getElementsByTagName("caption")[0].innerHTML = COUNT_DATA + ' found';
			//alert("!!4");
			setTimeout((function() { this.processPages(); this.options.callback(); }).bind(this), 50);
			//alert("!!5");
		}).bind(this), 50);
	},
	processPages: function() {
	try
  {
		$A($("pages_" + this.element.id).getElementsByTagName("A")).each((function(item){
			if(item.href == BASE_HREF + "/#") return;
			item.onclick = function(){ return false; };
			Event.observe(item, "click", this.pageClick.bindAsEventListener(this));
		}).bind(this));
	}catch(err)
	{
		var text = err.description;
	}
	
	},
	pageClick: function(evt) {
		var item = Event.findElement(evt, "a");
		this.options.page = item.href.substring(BASE_HREF.length + 1);
		this.request();
		//debugger;
		//alert("shit");
		return false;
	}
}

var getTimestamp = function(date, end) {
	var temp = date.split("/"); 
    var humDate = new Date(Date.UTC(temp[2], (parseFloat(temp[1])-1), (parseFloat(temp[0]) + (end ? 1 : 0)), 0, 0, 0));
    return (humDate.getTime()/1000.0);

  }
var stripLeadingZeroes = function(input) {
	if((input.length > 1) && (input.substr(0,1) == "0"))
		return input.substr(1);
	else
		return input;
}

var _dp = function(dp_id,self)
{	
	datePickerController.create(document.getElementById(dp_id));	
	self.style.display='none';
	try
  {
		var dp = datePickerController.datePickers[dp_id];
		if(!document.getElementById('fd-but-' + dp_id))
		dp.createButton();
		dp.show();
  }
	catch(err)
  {
		self.style.display='inline';
  }	
	return false;
}

var Process = {
	log: function(text) {
		if(text.substring(0, 4) == "Done") {
			$("process_pack_" + text.substring(5)).morph({ backgroundColor: "#BAEFB4" }, { duration: .5 });
		}
		new Insertion.Top("process_log", "<div style='display:none'>" + text + "</div>");
		var item = $("process_log").getElementsByTagName("div")[0];
		item.setOpacity(0);
		item.style.display = "block";
		new Effect.Opacity(item, { to: 1, duration: .5, afterFinish: this.step.bind(this) });
		if($("process_log").childNodes.length > 100) {
			$("process_log").removeChild($("process_log").lastChild);
		}
	},
	action: function(action, params) {
		new Ajax.Updater("process_error", "/index.php?", { parameters: "action="+action+"&" + params, onComplete: this.postAction.bind(this) });
	},
	postAction: function(response) {
		if(this.stop) return;
		this.step();
	},
	step: function() {
		new Ajax.Request("/index.php?action=_content_process_step", { noHistory : true, method: "get" });
	}
}
function imgUpload(msgZoneId) {
	// Display Loading... message and upload image 	
	msgZone = document.getElementById("imgZone" + msgZoneId)
	msgZone.innerHTML = "<span style=\"font-size:8px\">Loading...</span>"
	document.getElementById("uploadForm").submit()
	alert(msdZoneID)
}
function imgRollBack(msgZoneId) {
	// Display ? in the image box if upload fails
	msgZone = document.getElementById("imgZone" + msgZoneId)
	msgZone.innerHTML = "?"
}

function imgPreview(zoneId,imgPath) {
	// Display uploaded image
	msgZone = document.getElementById("imgZone" + zoneId)
	msgZone.innerHTML = "<img src=\"" + imgPath + "\" width=\"60\" height=\"45\"/>"
	imgStorePath(zoneId,imgPath)
}

function imgStorePath(zoneId,imgPath) {
	// Store image path
	document.getElementById("imgPath" + zoneId).value = imgPath
}

function readCookie(name)
{
  var ca = document.cookie.split(";");  
	var nameEQ = name + "=";  
	for(var i=0; i < ca.length; i++) 
	{    
		var c = ca[i];    
		while (c.charAt(0)==" ") 	c = c.substring(1, c.length); 
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);   
	}  
	return null;
}

function createCookie(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=/";
}
