//files common
function deleteElement(elem) {
	elem.parentNode.removeChild(elem);
}

function formatFsize(bytecount, precision, limitDetLevel) {
	var isNeg = false;
	if (bytecount < 0) isNeg = true;
	if (!precision) precision = 1;
	if (!limitDetLevel) limitDetLevel = 5;
	bytecount = Math.abs(bytecount);
	var str = bytecount+' ' + t('UnitsByte');
	if (limitDetLevel == 1) return (isNeg ? "-" : "") + str;
	if (Number(bytecount) >= 1024) { str = (bytecount/1024).toFixed(precision)+' ' + t('UnitsKB'); }
	if (limitDetLevel == 2) return (isNeg ? "-" : "") + str;
	if (Number(bytecount) >= 1048576) { str = (bytecount/1048576).toFixed(precision)+' ' + t('UnitsMB'); }
	if (limitDetLevel == 3) return (isNeg ? "-" : "") + str;
	if (Number(bytecount) >= 1073741824) { str = (bytecount/1073741824).toFixed(precision)+' ' + t('UnitsGB'); }
	return (isNeg ? "-" : "") + str;
}

//ex. formatSec
function TimeToStringViP (nSec, rustext) {
	var strSec = nSec.toString();
	var strSecR;
	var i;
	for (i = 0; i <= strSec.length; i++) {
		strSecR = strSec.charAt (i) + strSecR;
	}
	if(nSec == 1 || strSecR.match(/^1[^1]/)) {
		return rustext[0];
	} else if((nSec < 10 || nSec > 20) && strSecR.match(/^[2-4]/)) {
		return rustext[1];
	} else {
		return rustext[2];
	}
}


function TimeToStringImP (value, wordArr) {
	if (!value) return 0
	mod = value % 10
	if ((value%100)>=10 && (value%100)<=19) return wordArr[2];
	if (mod == 1) return wordArr[0];
	if (mod >= 2 && mod <= 4) return wordArr[1];
	return wordArr[2];
}

function GetUnitTextEng(value, wordArr) {
	if (value == 1) return wordArr[0];
	return wordArr[1];
}

function DaysLeftText (Year, Month, Day, Hour, Minute, Second) {
	tYear   = TimeToStringImP (Year, ['год', 'года', 'лет'])
	tMonth  = TimeToStringImP (Month, ['месяц', 'месяца', 'месяцев'])
	tDay	= TimeToStringImP (Day, ['день', 'дня', 'дней'])
	tHour   = TimeToStringImP (Hour, ['час', 'часа', 'часов'])
	tMinute = TimeToStringImP (Minute, ['минута', 'минуты', 'минут'])
	tSecond = TimeToStringImP (Second, ['секунда', 'секунды', 'секунд'])

	preValues = new Array (Year, Month, Day, Hour, Minute, Second)
	preTexts = new Array (tYear, tMonth, tDay, tHour, tMinute, tSecond)

	numPartsPresent=0
	for (i=5; i>=0; i--) if (preValues[i]!=0) numPartsPresent++

	text=''
	for (i=5; i>=0; i--) {
		if (preValues[i]!=0) {
			text=preValues[i]+' '+preTexts[i]+' '+text
			if (numPartsPresent>1) {
				text='и '+text
				numPartsPresent=0
			}
		}
	}
	return text;
}


function TriggerElement (obj, defPairStyle) {
	if (typeof obj == "string") obj = document.getElementById(obj);
	if (typeof obj != "object") return false;
	var pairStyle = "";
	if (obj.style.display == "none") {
		obj.style.display = pairStyle;
	} else {
		obj.style.display = "none";
	}
	return obj.style.display;
}

function TriggerElements(evt){
	var data = Array.prototype.slice.call(arguments,1);
	for(var i=0 ; i < data.length ; i++) {
		var curItem = data[i];
		if (typeof curItem == "string") {
			TriggerElement(curItem);
		} else if (typeof curItem == "object") {
			if (typeof curItem.o == "object") {
				TriggerElement(curItem.o, curItem.ps);
			} else {
				TriggerElement(curItem);
			}
		}
	}
	var evt = evt || window.event;
	cancelBubbling(evt);
	if (typeof event != "undefined") event.returnValue=false;
	return false;
}

//default common
function gebi(id) {return document.getElementById(id);}

// Определение размеров видимой области окна браузера
function screenSize() {
	var w, h;
	w = (window.innerWidth ? window.innerWidth : (document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.offsetWidth));
	h = (window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight));
	return {w:w, h:h};
}

// Опрелеляем top - left координаты блока obj
function absPosition(obj) {
	this.x = 0;
	this.y = 0;
	while(obj) {
		this.x += obj.offsetLeft;
		this.y += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return {x:this.x,y:this.y};
}

// Определение координат мыши
function defPosition(event) {
	var x = y = 0;
	if (document.attachEvent != null) { // Internet Explorer & Opera
		x = window.event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
		y = window.event.clientY + (document.documentElement.scrollTop	? document.documentElement.scrollTop  : document.body.scrollTop);
	}
	if (!document.attachEvent && document.addEventListener) { // Gecko
		x = event.clientX + window.scrollX;
		y = event.clientY + window.scrollY;
	}
	return {x:x, y:y};
}

// Предотвращение всплывания событий
function cancelBubbling(evt) {
	evt = evt || window.event;
	evt.cancelBubble = true;
	if (evt.stopPropagation) evt.stopPropagation();
}

// Добавление событий
function addHandler(object, event, handler, useCapture) {
	if (object.addEventListener) {
		object.addEventListener(event, handler, useCapture ? useCapture : false);
	} else if (object.attachEvent) {
		object.attachEvent('on' + event, handler);
	} else jswarn("Add handler is not supported");
}

// Удаление событий
function removeHandler(object, event, handler) {
	if (object.removeEventListener) {
		object.removeEventListener(event, handler, false);
	} else if (object.detachEvent) {
		object.detachEvent('on' + event, handler);
	} else alert("Remove Handler is not supported");
}

function onBeforeStartPage() {
	var FsndCookie = new Files_CookieUtils('FIDs' + gUserId + '.FSND', 0, -1);
	FsndCookie.expireCookie();
}

function ClearCookie(cname) {
	document.cookie = cname +'=; path=/; expires=Sun, 23 May 1982 20:00:00 GMT;';
}

function trash_confirm(e)	{
	if (!e) var e = window.event;
	var result = confirm(t('ConfEmptyTrash'));
	if (!result) {
		e.returnValue=false;
	}
}

function addJsCheck(formElement) {
	var m = formElement.linkcode.value.match(/([A-Za-z0-9]{6})/);
	if (m != null) {
		formElement.action = "/" + m[1];
	}
	formElement.jsison.value = 1;
}

function disableFcontrolButtons (flag) {
	if ($('gotoSendButton'))	$('gotoSendButton').disabled = flag;
	if ($('gotoSendButton2'))	$('gotoSendButton2').disabled = flag;
	if ($('gotoGetLinkButton'))	$('gotoGetLinkButton').disabled = flag;
	if ($('gotoGetLinkButton2'))$('gotoGetLinkButton2').disabled = flag;
	if ($('gotoDeleteButton'))	$('gotoDeleteButton').disabled = flag;
	if ($('gotoDeleteButton2'))	$('gotoDeleteButton2').disabled = flag;
	if ($('gotoUndelButton'))	$('gotoUndelButton').disabled = flag;
	if ($('gotoUndelButton2'))	$('gotoUndelButton2').disabled = flag;
}

function gotoSend (evnt, paramText) {
	var cFIDsSrc = new Files_CookieUtils('FIDs' + gCookieSuffix, 0, -1);
	var fileCount = parseInt(cFIDsSrc.countIds());
	var maxSentFiles = gMaxSentFiles;
	if ( fileCount > maxSentFiles) {
		var msgStr= ts('TooManyFilesToSendPlz1', maxSentFiles);
		var deltaCount = fileCount - maxSentFiles;
		if (deltaCount == 1) {
			msgStr += t('TooManyFilesToSendPlz2s');
		} else {
			msgStr += ts('TooManyFilesToSendPlz2m', deltaCount);
		}
		msgStr += t('TooManyFilesToSendPlz3');
		alert(msgStr);
		return false;
	} else if ( fileCount > 0 ) {
		disableFcontrolButtons(true);
		var cFIDsTrg = new Files_CookieUtils('FIDs' + gUserId + '.FSND', 0, -1);
		cFIDsTrg.setCookie(cFIDsSrc.getCookie());
		var newLocation = "/send?";
		if ((paramText) && paramText.indexOf('getlink') != -1) newLocation += 'upload=1&mainsend=1&';
		window.location = newLocation + 'folder=' + gFolderId;
		return false;
	} else {
		alert(t('NoFilesChecked'));
		return false;
	}
}

function gotoDelete(evnt) {
	var ctrlPressed = false;
	if(typeof(evt)=='undefined') evt = window.event || window.Event;
	var ctrlPressed = evt.ctrlKey;
	var cFIDsSrc = new Files_CookieUtils('FIDs' + gCookieSuffix, 0, -1);
	var fileCount = parseInt(cFIDsSrc.countIds());
	if ( fileCount > 0 ) {
		if (gFolderId == 4) {
			var result = false;
			if  (!ctrlPressed) {
				result = confirm(t('ConfHardDelete'));
			} else {
				result = true;
			}
			if (result) {
				disableFcontrolButtons(true);
				window.location = '/ls/' + gFolderId + '/'+ gCurPage +'?action=hdelm&id=1';
			}
		} else {
			if  (ctrlPressed) {
				result = confirm(t('ConfHardDelete'));
				if (result) {
					disableFcontrolButtons(true);
					window.location = '/ls/' + gFolderId + '/'+ gCurPage +'?action=hdelm&id=1';

				}
			} else {
				disableFcontrolButtons(true);
				window.location = '/ls/' + gFolderId + '/'+ gCurPage +'?action=delm&id=1';
			}
		}
		return false;
	} else {
		alert(t('NoFilesToDelete'));
		return false;
	}
	return false;
}

function gotoUndel(evnt) {
	var cFIDsSrc = new Files_CookieUtils('FIDs' + gCookieSuffix, 0, -1);
	var fileCount = parseInt(cFIDsSrc.countIds());
	if ( fileCount > 0 ) {
		disableFcontrolButtons(true);
		window.location = '/ls/' + gFolderId + '/'+ gCurPage + '?action=undelm&id=1';
		return false;
	} else {
		alert(t('NoFilesToRecover'));
		return false;
	}
}

function gotoLang(e) {
	var script = "/eng";
	if (window.gLanguageCode == 'EN') {
		script = "/rus";
	}
	var scriptname = getScriptName();
	var ids = "";
	if (window.cFIDs) {
		var ids = cFIDs.GetURLIds();
	} else if (window.MRUUploader) {
		var filezList = MRUUploader.queue.GetItemsArray(function (o) { return (o.status == MRUUploader.queue.STATUS_DONE)});
		for (var i=0; i< filezList.length; i++) {
			ids += "id=" + filezList[i].fileid + "%26";
		}
	}
	e.href = script + "?back=%2F" + scriptname + (ids ? "%3F" + ids : "");
}

function checkEmail(checkField) {
	var testresult = true;
	if (checkField.value.length>0) {
	 	var str = new String(checkField.value);
		var to_ar = str.split(/\s*,\s*/);
		for(i=0; i<to_ar.length; i++) {
			if(to_ar[i] == "")
				continue;
			to_ar[i] = to_ar[i].replace(/^\s+/g,"");
			to_ar[i] = to_ar[i].replace(/\s+$/g,"");
			var regexp1 = /^\"[^\"]+\"\s+<[\w\.-]+\@[\w\.-]+\.[\w\.-]+>$/i;
			var regexp2 = /^[\w\.-]+\@[\w\.-]+\.[\w\.-]+$/i;
			if(!regexp1.test(to_ar[i])) {
				if(!regexp2.test(to_ar[i])) {
					testresult = false;
					break;
				}
			}
		}
	}
	else {
		testresult = false;
	}
	return (testresult);
}

function validateBody(txar){
	var str=txar.value;
	if (str.length > 500) {
		alert (t('TooLongMsgBody'));
		str = str.substring(0, 500);
		txar.value = str;
	}
}

function checkLength(txar) {
	var beginer = 500;
	var b = document.getElementById("simbCount");
	var span = document.getElementById("strCount");
	if (txar.value.length <= beginer) {
		b.innerHTML = txar.value.length;
		span.style.color = "#909090";
	} else {
		b.innerHTML = beginer;
		span.style.color = "#FF0000";
		txar.value = txar.value.substring(0, beginer);
	}
}


function getScriptName() {
	var url = window.location + '';
	var m = url.match(/:\/\/.*\/(\w*)/);
	if (m != null) {
		return m[1];
	}
	return;
}

function OnSMSCodeReceive (code, uniq_code, data) {
	if (code == 200 && uniq_code && this.saved_obj) {
			var topItems = 3;
			var txt="";
			var inside="";
			data.numbers.sort(function (a,b) { return a.geoid - b.geoid;} );
			for (var i=0 ; i < topItems ; i++) {
				var curItem = data.numbers[i];
				var tmpTxt = ts('SMSGeoLineYE', t('SMSGeoId' + curItem.geoid), curItem.number);
				txt += tmpTxt;
			}
			//Top part is done, remove it and resort but as abc this time
			data.numbers.splice(0, topItems);
			data.numbers.sort(function (objA, objB) {
				var str1 = t('SMSGeoId' + objA.geoid);
				var str2 = t('SMSGeoId' + objB.geoid);
				return ( ( str1 == str2 ) ? 0 : ( ( str1 > str2 ) ? 1 : -1 ) );
			});
			for (var i=0 ; i < data.numbers.length ; i++) {
				var curItem = data.numbers[i];
				var tmpTxt = ts('SMSGeoLineYE', t('SMSGeoId' + curItem.geoid), curItem.number);
				inside += tmpTxt;
			};

			var resText;
			var divId = (new Date().valueOf() + Math.round(Math.random() * 1000));
			resText = "<table id='bsCntyLst" + divId + "' cellspacing='0' class='w100'>" + txt + "</table>";
			resText += "<table id='ctryLst" + divId + "' cellspacing='0' class='w100' style='display:none'>" + inside + "</table>";
			resText += "<a href=\"#\" onclick=\"return TriggerElements(event, this, 'ctryLst" + divId + "');\">" + t('TriggerGeoListLbl') + "</a>";
			var text = ts('SMSContextContainer', t('SMSMsg' + this.action_code), data.prefix, uniq_code, data.price_ye - 0.01, resText, '/vip#service' + this.action_code);
			contextArrowHelp(this.saved_event, this.saved_obj, text);
	} else {
		var text = t('SMSContextDisabled');
		contextArrowHelp(this.saved_event, this.saved_obj, text);
	}

}

function ShowSMSContextOffer (action_code, vfileid, saved_e, saved_object, callback) {
	var obj = {};
	obj.action_code = action_code;
	var newEvt = saved_e;
	if(window.ActiveXObject) { // IE loose event object after ajax call, let's clone it
		var newEvt = new Object;
		for (var evtItem in saved_e) {
			newEvt[evtItem] = saved_e[evtItem];
		}
	}
	obj.saved_event = newEvt;
	obj.saved_obj = saved_object;
	if ((!callback) && (typeof markAjaxedLine != "undefined")) callback = markAjaxedLine;
	if (callback) {
		obj.cbAjaxIndicator = callback;
		obj.ajaxOperand = vfileid;
		obj.ajaxIndicatorAutoOff = true;
		obj.ajaxIndicatorAutoOn = true;
	}

	var st = false;
	var ajax_url = gBaseURL + "fajaxcall";
	var func_name = 'cbRequestSMS' + (window.gLoggedIn ? "FL" : "");
	if (action_code > 10 && vfileid) {
		obj.vfileid = vfileid;
		if (window.AjaxFlash) {
			st = AjaxFlash.SendRequest(
				{uri: ajax_url, funcName: func_name, funcArgs: [action_code, vfileid], callbackFunc: OnSMSCodeReceive, callbackObject: obj});
		} else {
			st = ajax_call(func_name, action_code, vfileid, OnSMSCodeReceive, obj);

		}
	} else {
		obj.vfileid = "";
		if (window.AjaxFlash) {   
			st = AjaxFlash.SendRequest(
				{uri: ajax_url, funcName: func_name, funcArgs: [action_code], callbackFunc: OnSMSCodeReceive, callbackObject: obj});
		} else {
			st = ajax_call(func_name, action_code, OnSMSCodeReceive, obj);
		}
	}
	return st;
}

function getWidth() { // Вычисление ширины окна браузера
	var frameWidth=800; 
	if (self.innerWidth) frameWidth = self.innerWidth;  
	else if (document.documentElement && document.documentElement.clientWidth)  
		frameWidth = document.documentElement.clientWidth;  
	else if (document.body) frameWidth = document.body.clientWidth;
	return frameWidth;
}  
function getHeight() { // Вычисление высоты окна браузера
	var frameHeight=640;
	if (self.innerHeight) frameHeight = self.innerHeight;
	else if (document.documentElement && document.documentElement.clientHeight)
		frameHeight = document.documentElement.clientHeight;  
	else if (document.body) frameHeight = document.body.clientHeight;  
	return frameHeight;
}

var getElementsByClassName = function (className, elm, tag){
	elm = elm || document;
	if (elm.getElementsByClassName) {
		getElementsByClassName = function (className, elm, tag) {
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, elm, tag) {
			tag = tag || "*";
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, elm, tag) {
			tag = tag || "*";
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, elm, tag);
};
var getElementsByRel = function(obj, rel, tag) {
	var result = [], collection, i;
	tag = (typeof tag=='undefined') ? '*' : tag;
	collection = obj.getElementsByTagName(tag);
	for(i=0; i<collection.length; i++ ) {
	    if(collection[i].rel === rel)
      		result.push(collection[i]);
	}
	return result;
};
function table_animate(elementID, newLeft, newTop, newWidth, newHeight, time, callback) {
	var el = $(elementID);
	if(el == null)
		return;
	var cLeft = parseInt(el.style.marginLeft||0);
	var cTop = parseInt(el.style.marginTop||0);
	var cWidth = parseInt(el.offsetWidth);
	var cHeight = parseInt(el.offsetHeight);

	newTop = parseInt(newTop||0);
	newLeft = parseInt(newLeft||0);

	var totalFrames = 1;
	if(time > 0)
		totalFrames = time/40;
	var fLeft = newLeft - cLeft;
	if(fLeft != 0)
		fLeft /= totalFrames;
	var fTop = newTop - cTop;
	if(fTop != 0)
		fTop /= totalFrames;
	var fWidth = newWidth - cWidth;
	if(fWidth != 0)
		fWidth /= totalFrames;
	var fHeight = newHeight - cHeight;
	if(fHeight != 0)
		fHeight /= totalFrames;

	doFrame(elementID, cLeft, newLeft, fLeft,
			cTop, newTop, fTop, cWidth, newWidth, fWidth,
			cHeight, newHeight, fHeight, callback);
}
function doFrame(eID, cLeft, nLeft, fLeft,
				cTop, nTop, fTop, cWidth, nWidth, fWidth,
				cHeight, nHeight, fHeight, callback) {
	var el = $(eID);
	if(el == null)
		return;

	cLeft = moveSingleVal(cLeft, nLeft, fLeft);
	cTop = moveSingleVal(cTop, nTop, fTop);
	cWidth = moveSingleVal(cWidth, nWidth, fWidth);
	cHeight = moveSingleVal(cHeight, nHeight, fHeight);

	el.style.marginLeft = cLeft + 'px';
	el.style.marginTop = cTop + 'px';
	el.style.width = cWidth + 'px';
	el.style.height = cHeight + 'px';

	if(cLeft == nLeft && cTop == nTop && cHeight == nHeight && cWidth == nWidth) {
		if(callback != null)
			callback();
		return;
	}
	setTimeout(function(){doFrame(eID,cLeft,nLeft,fLeft,cTop,nTop,fTop,cWidth,nWidth,fWidth,cHeight,nHeight,fHeight,callback)}, 40);
}
function moveSingleVal(currentVal, finalVal, frameAmt) {
	if(frameAmt == 0 || currentVal == finalVal)
		return finalVal;
	currentVal += frameAmt;
	if((frameAmt> 0 && currentVal>= finalVal) || (frameAmt <0 && currentVal <= finalVal)) {
		return finalVal;
	}
	return currentVal;
}
function replaceClass(elm, new_class, old_class) {
	if(!elm) return;
	var classes = elm.className.split(/\s+/);
	var cl_str = '';
	for(var i=0; i<classes.length; i++) {
		if(typeof old_class != 'undefined' && classes[i] == old_class) {
			continue;
		}
		cl_str += ' ' + classes[i];
	}
	elm.className = cl_str + ' ' + new_class;
}
function getCurrentStyle(elem, style) {
	var computedStyle;
	if (typeof elem.currentStyle != 'undefined') {
		computedStyle = elem.currentStyle;
	} else {
		computedStyle = document.defaultView.getComputedStyle(elem, null);
	}
	return computedStyle[style];
}
function eventMouseXY(e) {
	var posx=0, posy=0;
	if (e.pageX || e.pageY) {
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) {
		posx = e.clientX + document.body.scrollLeft	+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
	return {'x': posx, 'y': posy};
}
function getEventTarget(e) {
	var targ;
	if(!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) targ = targ.parentNode;
	return targ;
}
function html_escape(text) {
	var html = '';
	for (var i=0; i < text.length; i++) {
		switch (text.charAt(i)) {
			case '&':
				html += '&amp;';
				break;
			case '"':
				html += '&quot;';
				break;
			case '>':
				html += '&gt;';
				break;
			case '<':
				html += '&lt;';
				break;
			case '%':
				html += '&#037;';
				break;
			case '\'':
				html += '&#039;';
				break;
			default:
				html += text.charAt(i);
				break;
		}
	}
	return html;
}