
//// >> HELPER FUNCTIONS >> ////

// checks if a variable is an object (if it is a string tryes to create an object by searching for an ID)
function CheckObject(obj) {
	if (typeof(obj) == 'string')
		obj = document.getElementById(obj);
	if (obj && typeof(obj) == 'object') {
		return [obj, true];
	} else {
		return [obj, false];
	}
}

// replaces string in an array (inserts new srtring at position if isInsert is set and oldVal not found)
function InsertArrValsInString(arr, str, pos) {
	var result = [];
	for (var i = 0; i < arr.length; i++) {
		result[i] = str.substr(0, pos) + arr[i].toString() + str.substr(pos, str.length);
	}
	return result;
}

// > cookies
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=/";
}

function ReadCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	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 EraseCookie(name) {
	CreateCookie(name,"",-1);
}
// < cookies

//// << HELPER FUNCTIONS << ////


// fix for ie6 : helper function
function FixIE6Reload() {
	document.body.style.width='';
	document.body.style.width='auto';
}

// enable form object
function EnableFormObject(obj) {
	var checkObj = CheckObject(obj);
	if (checkObj[1] && checkObj[0].disabled != 'undefined') {
		checkObj[0].disabled = false;
	}
}

// enable form object in Array
function EnableFormObjectInArray(arrObj) {
	for(var i = 0; i < arrObj.length; i++) {
		EnableFormObject(arrObj[i]);
	}
}

// disable form object
function DisableFormObject(obj) {
	var checkObj = CheckObject(obj);
	if (checkObj[1] && checkObj[0].disabled != 'undefined') {
		checkObj[0].disabled = true;
	}
}

// disable form object in Array
function DisableFormObjectInArray(arrObj) {
	for(var i = 0; i < arrObj.length; i++) {
		DisableFormObject(arrObj[i]);
	}
}

// disable form objects in array if a condition is true
function DisableFrmObjsIf(cond, arrObj) {
	if (cond) {
		DisableFormObjectInArray(arrObj);
	} else {
		EnableFormObjectInArray(arrObj);
	}
}

// swap items
function SwapItems(obj, down) {
	var checkObj = CheckObject(obj);
	if (checkObj[1]) {
		var objCurr = checkObj[0];
		if (down) {
			var objTarget = objCurr.nextSibling;
		} else {
			var objTarget = objCurr.previousSibling;
		}
		if(objTarget && objTarget.tagName == objCurr.tagName) {
			var buffer;
			buffer = [objTarget.id, objTarget.className, objTarget.innerHTML];
			objTarget.id = objCurr.id;
			objTarget.className = objCurr.className;
			objTarget.innerHTML = objCurr.innerHTML;
			objCurr.id = buffer[0];
			objCurr.className = buffer[1];
			objCurr.innerHTML = buffer[2];
		}
	}
}

// swap items in array
function SwapItemsInArray(arrObj, down) {
	for(var i = 0; i < arrObj.length; i++) {
		SwapItems(arrObj[i], down);
	}
}

// set class name to item
function SetStyleClass(obj, cName) {
	var checkObj = CheckObject(obj);
	if (checkObj[1]) {
		checkObj[0].className = cName;
	}
}

// add class name to item
function AddStyleClass(obj, cName) {
	var checkObj = CheckObject(obj);
	if (checkObj[1] && checkObj[0].className != cName // not equal
									&& checkObj[0].className.indexOf(cName + ' ') != 0 // not first
									&& checkObj[0].className.indexOf(' ' + cName + ' ') == -1 // not middle
									&& !(checkObj[0].className.indexOf(' ' + cName) != -1 && checkObj[0].className.indexOf(' ' + cName) == checkObj[0].className.length - cName.length - 1)) { // not last
		checkObj[0].className += ' ' + cName;
	}
}

// add class name to array of objects
function AddStyleClassInArray(arrObj, cName) {
	for(var i = 0; i < arrObj.length; i++) {
		AddStyleClass(arrObj[i], cName);
	}
}

// remove class name to item
function RemoveStyleClass(obj, cName) {
	var checkObj = CheckObject(obj);
	if (checkObj[1]) {
		if(checkObj[0].className == cName)
			checkObj[0].className = '';
		else if (checkObj[0].className.indexOf(' ' + cName + ' ') != -1) {
			reg = new RegExp(' ' + cName + ' ', 'g');
			checkObj[0].className = checkObj[0].className.replace(reg, ' ');
		}
		else if (checkObj[0].className.indexOf(cName + ' ') == 0)
			checkObj[0].className = checkObj[0].className.substr(cName.length + 1, checkObj[0].className.length);
		else if (checkObj[0].className.indexOf(' ' + cName) == checkObj[0].className.length - cName.length - 1)
			checkObj[0].className = checkObj[0].className.substr(0, checkObj[0].className.length - cName.length - 1);
	}
}

// remove class name to array of objects
function RemoveStyleClassInArray(arrObj, cName) {
	for(var i = 0; i < arrObj.length; i++) {
		RemoveStyleClass(arrObj[i], cName);
	}
}

// add remove class name to item
function AddRemoveStyleClass(obj, cName) {
	var checkObj = CheckObject(obj);
	if (checkObj[1]) {
		if (checkObj[0].className.indexOf(cName) == -1) {
			AddStyleClass(checkObj[0], cName);
		} else {
			RemoveStyleClass(checkObj[0], cName);
		}
	}
}

// add remove class name to array of objects
function AddRemoveStyleClassInArray(arrObj, cName) {
	for(var i = 0; i < arrObj.length; i++) {
		AddRemoveStyleClass(arrObj[i], cName);
	}
}

// set content to item
function SetContent(obj, content) {
	var checkObj = CheckObject(obj);
	if (checkObj[1]) {
		checkObj[0].innerHTML = content;
	}
}

// set content to array of objects
function SetContentInArray(arrObj, content) {
	for(var i = 0; i < arrObj.length; i++) {
		SetContent(arrObj[i], content);
	}
}

// admin page list: adds item ID and list ID to array if an item is changed
function MarkItem(arr, itemID, listID) {
	var buffer = arr;
	var flag = true;
	if (typeof(arr) == 'object') {
		for (var i = 0; i < arr.length; i++) {
			if (typeof(arr[i]) == 'object' && arr[i][0] == itemID) {
				flag = false;
				break;
			}
		}
		if (flag) {
			buffer.push([itemID, listID]);
		}
	}
	return buffer;
}

// remove DOM element
function RemoveItem(obj) {
	var checkObj = CheckObject(obj);
	if (checkObj[1]) {
		checkObj[0].parentNode.removeChild(checkObj[0]);
	}
}

// tab behavior
function TabBehavior(objCurrTab, arrTabs, objCurrTabContent, arrTabsContent, objTargetStore, classOn, classHide, enableReCollapse) {
	var checkObjCurrTab = CheckObject(objCurrTab),
			checkObjCurrTabContent = CheckObject(objCurrTabContent),
			checkObjTargetStore = CheckObject(objTargetStore),
			arrTabsObj = [],
			arrTabsContentObj = [],
			checkArrTabs = true,
			checkArrTabsContent = true,
			tmp;
	if (typeof(arrTabs) == 'object') {
		for (var i = 0; i < arrTabs.length; i++) {
			tmp = CheckObject(arrTabs[i]);
			if (tmp[1]) {
				arrTabsObj.push(tmp);
			}
		}
	} else {
		var checkArrTabs = false;
	}
	if (typeof(arrTabsContent) == 'object') {
		for (var i = 0; i < arrTabsContent.length; i++) {
			tmp = CheckObject(arrTabsContent[i]);
			if (tmp[1]) {
				arrTabsContentObj.push(tmp);
			}
		}
	} else {
		var checkArrTabsContent = false;
	}
	if (checkObjCurrTab[1] && checkObjCurrTabContent[1] && checkArrTabs && checkArrTabsContent) {
		if ((checkObjCurrTab[0].className.indexOf(classOn) == -1) || (enableReCollapse && checkObjCurrTab[0].className.indexOf(classOn) != -1)) {
			if (checkObjCurrTab[0].className.indexOf(classOn) == -1) {
				AddStyleClass(checkObjCurrTab[0], classOn);
				RemoveStyleClass(checkObjCurrTabContent[0], classHide);
				if (checkObjTargetStore[1]) {
					checkObjTargetStore[0].value = checkObjCurrTab[0].id;
				}
			} else {
				RemoveStyleClass(checkObjCurrTab[0], classOn);
				AddStyleClass(checkObjCurrTabContent[0], classHide);
				if (checkObjTargetStore[1]) {
					checkObjTargetStore[0].value = '';
				}
			}
			var arrOtherTabs = [];
			for (i = 0; i < arrTabsObj.length; i++) {
				if (arrTabsObj[i][0].id != checkObjCurrTab[0].id) {
					arrOtherTabs[i] = arrTabsObj[i][0];
				}
			}
			RemoveStyleClassInArray(arrOtherTabs, classOn);
			var arrOtherTabsContent = [];
			for (i = 0; i < arrTabsContentObj.length; i++) {
				if (arrTabsContentObj[i][0].id != checkObjCurrTabContent[0].id) {
					arrOtherTabsContent[i] = arrTabsContentObj[i][0];
				}
			}
			AddStyleClassInArray(arrOtherTabsContent, classHide);
		}
	}
	return false;
}

// store sub id in an array
function StoreSubID(obj, strTarget, classHide) {
	var checkObj = CheckObject(obj),
			arrTarget = (strTarget.length > 0) ? strTarget.split(',') : [];
	if (checkObj[1]) {
		obj = checkObj[0].id;
		if (checkObj[0].className.indexOf(classHide) == -1) {
			if (!InArray(obj, arrTarget)) {
				arrTarget.push(obj);
			}
		} else {
			if (InArray(obj, arrTarget)) {
				for (i = 0; i < arrTarget.length; i++) {
					if (arrTarget[i] == obj) {
						arrTarget.splice(i, 1);
					}
				}
			}
		}
	}
	var result = arrTarget.join(',');
	return result;
}

// parse item ID
function GetIntAfterSymbol(str, sbl) {
	return parseInt(str.substr(str.indexOf(sbl) + sbl.length, str.length));
}

// check value in array
function InArray(val, arr) {
	var result = false;
	for (var i = 0; i < arr.length; i++) {
		if (val == arr[i]) {
			return true;
			break;
		}
	}
	return result;
}

// send parsed list to form field
function SubmitcList(arrListIDs, targetID, funcParse) {
	var buffer = [],
			tmp = [];
	for (var i = 0; i < arrListIDs.length; i++) {
		if ((tmp = funcParse(arrListIDs[i])) === false)
			return false;
		else
			buffer = buffer.concat(tmp);
	}
	for (var i = 0; i < buffer.length; i++) {
		buffer[i] = buffer[i].join(']|[');
	}
	buffer = buffer.join(']||[');
	document.getElementById(targetID).value = buffer;
	return true;
}

// get deleted list item titles
function SubmitcListWarn4Del(arrParsedPageList, idPos, titlePos, flagDelPos, errMsg) {
	var arrTtls = [],
			arrIDs = [];
	for (var i = 0; i < arrParsedPageList.length; i++) {
		if (arrParsedPageList[i][flagDelPos] && !InArray(arrParsedPageList[i][idPos], arrIDs)) {
			arrIDs.push(arrParsedPageList[i][idPos]);
			arrTtls.push([arrParsedPageList[i][titlePos]]);
		}
	}
	if (arrTtls.length != 0) {
		if (!confirm(errMsg + '\n\n' + arrTtls.join(', ')))
			return false;
	}
	return true;
}

// trim in array
function ReplaceInArray(str, arrNeedles, arrRepl) {
	for (var i = 0; i < arrNeedles.length; i++) {
		reg = new RegExp(arrNeedles[i], 'g');
		str = str.replace(reg, arrRepl[i]);
	}
	return str;
}

// find absolute position
function FindAbsPos(obj) {
	var checkObj = CheckObject(obj);
	if (checkObj[1]) {
		var curleft = curtop = 0;
		if (checkObj[0].offsetParent) {
			do {
				curleft += checkObj[0].offsetLeft;
				curtop += checkObj[0].offsetTop;
			} while (checkObj[0] = checkObj[0].offsetParent);
		}
		return [curleft,curtop];
	}
}

// change font size
// !!! REQUIRES COOKIES.JS !!!
function ChangeFontSize(inc) {
//	EraseCookie('fsCache');
	var fsCache = ReadCookie('fsCache');
	var p = document.getElementsByTagName('BODY');
	for(n=0; n<p.length; n++) {
		if(p[n].style.fontSize) {
			var size = parseInt(p[n].style.fontSize.replace("px", ""));
		} else {
			var size = 14;
		}
		if (fsCache && inc==0) {
			if (p[n].style.fontSize != fsCache)
				p[n].style.fontSize = fsCache;
		} else {
			p[n].style.fontSize = size+inc + 'px';
			CreateCookie('fsCache',p[n].style.fontSize,7);
		}
	}
}



