// Prototype functions

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

// FIX functions

function fixGetElementsByName(tag, name) {
    
	if ( navigator.userAgent.indexOf('MSIE') >= 0 ) { 
		var elem = document.getElementsByTagName(tag);
		var arr = new Array();
		for(i = 0,iarr = 0; i < elem.length; i++) {
			att = elem[i].getAttribute("name");
			if(att == name) {
				arr[iarr] = elem[i];
				iarr++;
			}
		}
		return arr;
	} else {
		return document.getElementsByName(name);
	}
}

// Common functions

function submitForm(button, name) {
	s_form = findObject(name, 'form');
	if(button != undefined) {
		button.href = "#";
		button.onclick = function () {
			return false;
		}
	}
	if(s_form != undefined) {
		s_form.onsubmit = function() {
			return false;
		}
		s_form.submit();
		return false;
	} else {
		alert('Unknown Form with name: ' + name);
		return false;
	}
}

function clearForm(obj) {
	for(var i=0; i < obj.elements.length; i++) {
		switch (obj.elements[i].tagName) {
			case "INPUT":
				obj.elements[i].value = '';
				break;
			case "TEXTAREA":
				obj.elements[i].innerHTML = '';
				break;
		}
	}				

}

function checkLength(e) {
	var evt = (e) ? e : window.event;
	if (evt) {
		element = evt.target;
		var code = (document.all) ? evt.keyCode:evt.charCode;
		if (((code != 0) && (code != 8)) && (element.value.length >= element.getAttribute('maxsymbols'))) return false;
	}
	document.getElementById(element.getAttribute('counter_id')).innerHTML = element.getAttribute('maxsymbols') - element.value.length;
	return true;
}

function findObject(object_name, tag) {
	var object = document.getElementById( object_name ) ;
	var colElementsByName = document.getElementsByName( object_name ) ;
	
	var i = 0;
	while ( object || i == 0 ) {
		if(tag) {
			if ( object && object.tagName.toLowerCase() == tag )
				break ;
		} else if(object) {
			break;
		}
		object = colElementsByName[i++] ;
	}
	return object;
}

function getElementProp(elem, prop) {
	if (typeof elem!="object") elem = document.getElementById(elem);
	  
	// external stylesheet for Mozilla, Opera 7+ and Safari 1.3+
	if (document.defaultView && document.defaultView.getComputedStyle) {
		if (prop.match(/[A-Z]/)) prop = prop.replace(/([A-Z])/g, "-$1").toLowerCase();
		return document.defaultView.getComputedStyle(elem, "").getPropertyValue(prop);
	}
	  
	// external stylesheet for Explorer and Opera 9
	if (elem.currentStyle) {
		var i;
		while ((i=prop.indexOf("-"))!=-1) prop = prop.substr(0, i) + prop.substr(i+1,1).toUpperCase() + prop.substr(i+2);
		return elem.currentStyle[prop];
	}
	  
	return "";
}


function initCheckableFields() {
	var fields = document.getElementsByTagName('input');
	for(var i=0;i<fields.length;i++) {
		if(fields[i].getAttribute('checklink')) {
			fields[i].onblur = function() {
				if(this.previous_value != this.value) {
					this.previous_value = this.value;
					var ajaxObject = new sack();
					ajaxObject.requestFile = this.getAttribute('checklink');
					ajaxObject.setVar(this.getAttribute('name'), this.value);
					ajaxObject.onCompletion = function(ajaxObject, field){ 
						return function() { 
							eval("var result = " + ajaxObject.response);
							if(result) {
								var status_fields = fixGetElementsByName('div', field.getAttribute('name') + '-status');
								for(var i=0;i<status_fields.length;i++) {
									status_fields[i].style.display = "none";
								}
								var status_block = document.getElementById(field.getAttribute('name') + '-status-' + result.status);
								status_block.style.display = "block";
							} else {
								alert(ajaxObject.response);
							}
						} 
					} (ajaxObject, this);
					ajaxObject.runAJAX();
				}
			}
			
		}
	}
}

function checkEqual(field_name, field2_name) {
	
	
	var field = findObject(field_name, 'input');
	var field2 = findObject(field2_name, 'input');

	var status_fields = fixGetElementsByName('div', field.getAttribute('name') + '-status');
	for(var i=0;i<status_fields.length;i++) {
		status_fields[i].style.display = "none";
	}
	
	var status_fields = fixGetElementsByName('div', field2.getAttribute('name') + '-status');
	for(var i=0;i<status_fields.length;i++) {
		status_fields[i].style.display = "none";
	}
	
	var status = 1;
	
	pat = /[^;"']{6,}/;
	if(!pat.test(field2.value)) {
		var status_block = document.getElementById(field2.getAttribute('name') + '-status-' + 1);
		status_block.style.display = "block";
	}
	
	if(field.value == '' || field2.value == '') return false;	
	
	if(field.value == field2.value) {
		status = 0;
	}

	var status_block = document.getElementById(field.getAttribute('name') + '-status-' + status);
	status_block.style.display = "block";
	
	return status;
}

function addFavouritePicture(id) {
	var ajaxIndex = ajaxObjects.length;
	ajaxObjects[ajaxIndex] = new sack();
	ajaxObjects[ajaxIndex].requestFile = "/add-favourite/pic";

	ajaxObjects[ajaxIndex].setVar('id', id);
	ajaxObjects[ajaxIndex].onCompletion = function(){ showAddFavouritePicResult(ajaxIndex); };	// Specify function that will be executed after file has been found
	ajaxObjects[ajaxIndex].runAJAX();		// Execute AJAX function
	
}

function showAddFavouritePicResult(ajaxIndex) {
	eval("var result = " + ajaxObjects[ajaxIndex].response);
	if(result != undefined) {
		switch (result.status) {
			case 0:
				showMessage("Картине добавлено Ваше одобрение");
				break;
			case 1: 
				showError("Изображение уже одобрено");
				break;
			case 2: 
				showError("Необходимо зарегистрироваться на сайте");
				break;
			default:
				showError("Неизвестная ошибка!");
				break;
		}
	} else {
		showError("Ошибка при обращении к серверу");
	}
	
	ajaxObjects[ajaxIndex] = false;
}

function addFavouriteUser(id) {
	var ajaxIndex = ajaxObjects.length;
	ajaxObjects[ajaxIndex] = new sack();
	ajaxObjects[ajaxIndex].requestFile = "/add-favourite/user";

	ajaxObjects[ajaxIndex].setVar('id', id);
	ajaxObjects[ajaxIndex].onCompletion = function(){ showAddFavouriteUserResult(ajaxIndex); };	// Specify function that will be executed after file has been found
	ajaxObjects[ajaxIndex].runAJAX();		// Execute AJAX function
	
}

function showAddFavouriteUserResult(ajaxIndex) {
	eval("var result = " + ajaxObjects[ajaxIndex].response);
	if(result != undefined) {
		switch (result.status) {
			case 0:
				showMessage("Пользователь успешно добавлено в Избранное");
				break;
			case 1: 
				showError("Пользователь уже находится в Избранном");
				break;
			case 2: 
				showError("Необходимо зарегистрироваться на сайте");
				break;
			default:
				showError("Неизвестная ошибка!");
				break;
		}
	} else {
		alert("Ошибка при обращении к серверу");
	}
	
	ajaxObjects[ajaxIndex] = false;
}


function switchFavouriteAuthors(obj, link){
	var val = 0;
	if(obj.checked == true) {
		val = 1;
	}
	location.href = link + val;
}

function switchSavers(id) {
	var obj = findObject('savers-' + id);
	if(obj.style.display == 'none') {
		obj.style.display = 'block';
	} else {
		obj.style.display = 'none';
	}
}

function getClientWidth() {
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}

function getClientHeight() {
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}

function getBodyScrollTop() {
  return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}

function getBodyScrollLeft() {
  return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}

function showMessage(msg) {
	showMessageBox(msg, 'notice');
}


function showError(msg) {
	showMessageBox(msg, 'noticeErr');
}

function showMessageBox(msg, className) {
	var block = document.getElementById('messageBox');
	if(block == undefined) {
		alert(msg);
	} else {
		var msgBox = document.getElementById('noticeMessage');
		block.className = className;
		msgBox.innerHTML = msg;
		block.style.left = parseInt(getClientWidth()/2)+getBodyScrollLeft() - block.offsetWidth/2 + "px";
		block.style.top = parseInt(getClientHeight()/2)+getBodyScrollTop() - block.offsetHeight/2 + "px";
		block.style.visibility = 'visible';
	}
}

function hideMessageBox() {
	var block = document.getElementById('messageBox');
	block.style.visibility = 'hidden';
}



function showSendLinkBlock(block_id) {
	var sl_block = document.getElementById(block_id);
	sl_block.style.visibility = 'hidden';
	sl_block.style.display = 'block';
	
	sl_block.style.left = document.body.clientWidth / 2 - sl_block.offsetWidth / 2 + getScrollLeft() + "px";
	sl_block.style.top = document.body.clientHeight / 3 - sl_block.offsetHeight / 2 + getScrollTop() + "px";
	sl_block.style.visibility = 'visible';
}

function hideSendLinkBlock(block_id) {
	var sl_block = document.getElementById(block_id);
	var sl_block_msg = document.getElementById(block_id + '-msg');
	sl_block_msg.innerHTML = "";
	sl_block.style.display = 'none';
}

function sendLink(email_fld, link, block_id) {
	var email = findObject(email_fld, 'input').value;
	var ajaxIndex = ajaxObjects.length;
	ajaxObjects[ajaxIndex] = new sack();
	ajaxObjects[ajaxIndex].requestFile = "/mailer/sendlink";

	ajaxObjects[ajaxIndex].setVar('email', email);
	ajaxObjects[ajaxIndex].setVar('link', link);
	ajaxObjects[ajaxIndex].onCompletion = function(){ showSendLinkStatus(ajaxIndex, block_id); };	// Specify function that will be executed after file has been found
	ajaxObjects[ajaxIndex].runAJAX();		// Execute AJAX function
	
}

function showSendLinkStatus(ajaxIndex, block_id) {
	eval("var result = " + ajaxObjects[ajaxIndex].response);
	var sl_block_msg = document.getElementById(block_id + '-msg');
	if(result != undefined) {
		switch (result.status) {
			case 0:
				sl_block_msg.innerHTML = "Ссылка успешно отправлена";
				break;
			case 1: 
				sl_block_msg.innerHTML = "Введенный Вами email некорректен!";
				break;
			default:
				sl_block_msg.innerHTML = "Неизвестная ошибка!";
				break;
		}
	} else {
		sl_block_msg.innerHTML = "Ошибка при обращении к серверу";
	}
	
	ajaxObjects[ajaxIndex] = false;
}

// Paging submit

function pagingPagesSubmit(frm) {
	var el = frm.elements[0];
	el.onchange();
}

function showIndex() {
	window.setTimeout(function() {
		location.href='/';
	}, 2400);
}

function preDeleteCheck(del_lnk) {
	if(confirm('Вы действительно хотите удалить изображение?')) {
		location.href = del_lnk;
	}
}

function makeComplaint(id) {
	var ajaxIndex = ajaxObjects.length;
	ajaxObjects[ajaxIndex] = new sack();
	ajaxObjects[ajaxIndex].requestFile = "/complaint/pic";

	ajaxObjects[ajaxIndex].setVar('id', id);
	ajaxObjects[ajaxIndex].onCompletion = function(){ showMakeComplaintStatus(ajaxIndex); };	// Specify function that will be executed after file has been found
	ajaxObjects[ajaxIndex].runAJAX();		// Execute AJAX function
}

function showMakeComplaintStatus(ajaxIndex) {
	eval("var result = " + ajaxObjects[ajaxIndex].response);
	if(result != undefined) {
		switch (result.status) {
			case 0:
				showMessage("Жалоба отправлена");
				break;
			case 1: 
				showError("Вы уже жаловались на это изображение!");
				break;
			case 2:
				showError("Для того, чтобы отправить жалобу Вы должны быть зарегистрированы!");
				break;			
			case 3:
				showError("Неизвестное системе изображение!");
				break;
			default:
				showError('Неизвестная ошибка!');
				break;
		}
	} else {
		showError('Ошибка при обращении к серверу');
	}
	ajaxObjects[ajaxIndex] = false;	
}

function getCode(id) {
	var obj = findObject('addToBlog' + id);
	var lnk = findObject('picId' + id);
	var lnk_pos = getPosition(lnk);
	obj.style.display = 'block';
	obj.style.top = lnk_pos.top + lnk_pos.height + 10 + "px";
	obj.style.left = lnk_pos.left + lnk_pos.width - obj.offsetWidth - 160 + "px";
	var area = findObject('addToBlogContent' + id);
	area.select(); 
}

function hideBlogAdd(id) {
	var obj = findObject('addToBlog' + id);
	obj.style.display = 'none';
}

function getPosition(el){
    var w = el.offsetWidth;
    var h = el.offsetHeight;
    var l = 0;
    var t = 0;
    while (el){
        l += el.offsetLeft;
        t += el.offsetTop;
        el = el.offsetParent;
    }
    return {'left':l, 'top':t, 'width': w, 'height':h};
}