// JavaScript Document

function lpad(s,n,c) {
	var i; 
	var a=s;
	for (i = 0; i < n - s.length; i++) {
		a = c+a;
	}; 
	return a;
}

function keyfilter_num(evt) {
	evt = (evt) ? evt : window.event
	var charCode = (evt.which) ? evt.which : evt.keyCode
	if (charCode!=46 &&charCode > 31 && (charCode < 48 || charCode > 57)) {
		status = "This field accepts numbers only."
		return false
	}
	status = ""
	return true
}

function keyfilter_dig(evt) {
	evt = (evt) ? evt : window.event
	var charCode = (evt.which) ? evt.which : evt.keyCode
	if ( charCode > 31 && (charCode < 48 || charCode > 57)) {
		status = "This field accepts numbers only."
		return false
	}
	status = ""
	return true
}

function ValidEmail(EmailAddr) {
	var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
	var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
	
	var SpecChar="!#$%^&*()'+{}[]\|:;?/><,~`" + "\"";
	var frmValue = new String(EmailAddr);
	var len = frmValue.length;
	
	if( len < 1 ) { return false; }
	for (var i=0;i<len;i++)
	{
				temp=frmValue.substring(i,i+1)
				if (SpecChar.indexOf(temp)!=-1)
		 		{
					return false;
				}
	}	
	
	if(!reg1.test(frmValue) && reg2.test(frmValue)) 
	{ 
		return true;
	}
	
	return false;
}

function keyfilter_alnum(evt) {
	evt = (evt) ? evt : window.event
	var charCode = (evt.which) ? evt.which : evt.keyCode
	if (!  ((charCode >= 48 && charCode <= 57)||(charCode >= 97 && charCode <= 122)||(charCode >= 65 && charCode <= 90)||charCode==95)  ) {
		status = "This field accepts 'a'-'z','A'-'Z','0'-'9' and '_' only."
		return false
	}
	status = ""
	return true
}



function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}

function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

function SetCookie(cookieName,cookieValue) {
 var nDays = 1;
 var today = new Date();
 var expire = new Date();
 if (nDays==null || nDays==0) nDays=1;
 expire.setTime(today.getTime() + 3600000*24*nDays);
 document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}


function getCookie(Name) {
	var search = Name + "="
	if (document.cookie.length > 0) { // if there are any cookies
	offset = document.cookie.indexOf(search)
		if (offset != -1) { // if cookie exists
			offset += search.length
			// set index of beginning of value
			end = document.cookie.indexOf(";", offset)
			// set index of end of cookie value
			if (end == -1)
			end = document.cookie.length
			return unescape(document.cookie.substring(offset, end))
		}
	}
}

function popupWindow(url) {
  window.open(url,'popupWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=450,height=280,screenX=150,screenY=150,top=150,left=150')
}

(function() {
	
	/**
	 * GeoKBD 0.3.3 - Georgian keyboard and text convertation library
	 *
	 * Copyright (c) 2007 Ioseb Dzmanashvili (http://www.code.ge)
	 * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
	 */
	
	String.prototype.pasteTo = function(field) {
		field.focus();
		if (document.selection) {
			var range = document.selection.createRange();
			if (range) {				
				range.text = this;
			}
		} else if (field.selectionStart != undefined) {
			var scrollTop = field.scrollTop, start = field.selectionStart, end = field.selectionEnd;
			var value = field.value.substring(0, start) + this + field.value.substring(end, field.value.length);
			field.value = value;
			field.scrollTop = scrollTop;
			field.setSelectionRange(start + this.length, start + this.length); 
		} else {
			field.value += this;
			field.setSelectionRange(field.value.length, field.value.length);		
		}
	}, 
	
	String.prototype.translateToKA = function() {
		
		/**
		 * Original idea by Irakli Nadareishvili
		 * http://www.sapikhvno.org/viewtopic.php?t=47&postdays=0&postorder=asc&start=10
		 */
		var index, chr, text = [], symbols = "abgdevzTiklmnopJrstufqRySCcZwWxjh";
		
		for (var i = 0; i < this.length; i++) {
			chr = this.substr(i, 1);
			if ((index = symbols.indexOf(chr)) >= 0) {
				text.push(String.fromCharCode(index + 4304));
			} else {
				text.push(chr);
			}
		}
		
		return text.join('');
		
	},
	
	GeoKBD = {
		
		browser: {
			isOpera: navigator.userAgent.toLowerCase().indexOf('opera') > -1,
			isIe: navigator.userAgent.toLowerCase().indexOf('msie') > -1,
			isIe6: navigator.userAgent.toLowerCase().indexOf('msie 6') > -1,
			isIe7: navigator.userAgent.toLowerCase().indexOf('msie 7') > -1
		},
		
		event: {
			
			get: function(e) {
				return e || window.event;
			},
			
			getKeyCode: function(e) {
				e = this.get(e);
				return e.keyCode || e.which;
			},
			
			targetIs: function(e, tagName) {
				e = this.get(e);
				var t = e.target || e.srcElement;
				return t.tagName.toLowerCase() == tagName ? t : null;
			},
			
			attach: function(obj, eventName, fnc, capture) {
				if (obj.addEventListener) {
					obj.addEventListener(eventName, fnc, capture);
				} else if (obj.attachEvent) {
					return obj.attachEvent('on' + eventName, fnc);
				} else {
					obj['on' + eventName] = fnc;
				}	
			},
			
			detach: function(obj, eventName, fnc, capture) {
				if (obj.removeEventListener) {
					obj.removeEventListener(eventName, fnc, capture);
				} else if (obj.detachEvent) {
					obj.detachEvent('on' + eventName, fnc);
				} else {
					obj['on' + eventName] = null;
				}
			},
			
			cancel: function(e) {
				e = this.get(e);
				if (e.stopPropagation) {
					e.stopPropagation();
					e.preventDefault();
				} else {
					e.cancelBubble = true;
					e.returnValue = false;
				}
			}
			
		},
		
		keyHandlers: {},
		
		addKeyHandler: function(key, callback) {
			if (typeof key == 'string') {
				key = key.charCodeAt(0);
			}
			if (!this.keyHandlers[key]) {
				this.keyHandlers[key] = [];
			}
			this.keyHandlers[key].push(callback);
		},
		
		handleKey: function(key) {
			if (GeoKBD.keyHandlers[key]) {
				var handler = null;
				for (var i = 0; i < GeoKBD.keyHandlers[key].length; i++) {
					handler = GeoKBD.keyHandlers[key][i];
					if (handler.constructor && handler.constructor == Array) {
						handler[0][handler[1]].call(handler[0], key);
					} else {
						handler(key);
					}
				}
			}
		},
		
		map: function(form, fieldName, switcher) {
			
			var self = this, names = [], forms = [];
			
			if (form) {
				if (form.constructor) {
					if (form.constructor == String) {
						names.push(form);
					} else if (form.constructor == Array) {
						names = form;
					}
					if (names.length) {
						for (var idx in names) {
							if (document.forms[names[idx]]) {
								forms.push(document.forms[names[idx]]);
							}
						}
					}
				} else {
					forms.push(form);
				}
			} else {
				forms = document.forms;
			}
						
			for (var idx = 0; idx < forms.length; idx++) {
				
				form = forms[idx];
						
				if (!form.fields || form.fields == undefined) form.fields = {};
				if (form.ka == undefined) form.ka = form[switcher] ? form[switcher].checked : true;
				
				if (fieldName) {
					if (typeof fieldName == 'string') fieldName = [fieldName];
					for (var i = 0; i < fieldName.length; i++) {
						if (form[fieldName[i]] && !form.fields[fieldName[i]]) form.fields[fieldName[i]] = fieldName[i];
					}
				} else {
					var name, type;
					for (var i = 0; i < form.elements.length; i++) {
						if (form.elements[i].type) {
							name = form.elements[i].name || form.elements[i].id; 
							type = form.elements[i].type.toLowerCase();
							if (name && (type == 'text' || type == 'textarea')) {
								form.fields[name] = name;
							}
						}
					}
				}
				
				switcher = switcher || 'geo';
				form.switcher = switcher;
											
				form.onkeypress = function(e) {
					
					e = self.event.get(e);
					if (e.altKey || e.ctrlKey) return;
					
					if (!self.browser.isIe && !self.browser.isOpera && !e.charCode) {
						return;
					}
					
					var target, _switcher = switcher, keyCode = self.event.getKeyCode(e);
					
					if (keyCode == 96) {
						if (this[_switcher]) {
							this.ka = this[_switcher].checked = !this[_switcher].checked;
						} else {
							this.ka = !this.ka;
						}
						return false;
					} else if (this[_switcher]) {
						this.ka = this[_switcher].checked;
					}
					
					if (!this.ka) return;
					
					if ((target = (self.event.targetIs(e, 'textarea') || self.event.targetIs(e, 'input')))) {
						if (!this.fields[target.name || target.id]) return;
						text = String.fromCharCode(keyCode);
						kaText = text.translateToKA();
						if (kaText != text) {
							if (GeoKBD.browser.isIe) {
								e.keyCode = kaText.charCodeAt(0);
							} else {
								kaText.pasteTo(target);
								return false;
							}
						}
					}
				}
			
			}
			
			form = forms = names = null;
			
		},
		
		mapIFrame: function(iframe) {
			
			var __keypress = function(e) {
				
				if (e.altKey || e.ctrlKey) return;
				var doc = (e.target || e.srcElement).ownerDocument;
				if (doc.ka == undefined) doc.ka = true;
				var keyCode = GeoKBD.event.getKeyCode(e);
				var text = String.fromCharCode(keyCode);
				var form, switcher;
				if (parent.document.forms[doc.parentForm]) {
					form = parent.document.forms[doc.parentForm];
					if (form.switcher && form[form.switcher]) {
						switcher = form[form.switcher];
					}
				}
				
				if (keyCode == 96) {
					doc.ka = !doc.ka;					
					if (switcher) switcher.checked = doc.ka;
					GeoKBD.event.cancel(e);
				} else if (switcher) {
					doc.ka = switcher.checked;
				}
				
				form = switcher = null;
				
				if (doc.ka) {				
					var kaText = text.translateToKA();
					if (kaText != text) {
						if (!GeoKBD.browser.isIe) {
							doc.execCommand('InsertHTML', false, kaText);
						} else {
							var range = doc.selection.createRange();
							range.pasteHTML(kaText);
						}
						GeoKBD.event.cancel(e);
					}
				}
				
			}
			
			var __focus = function(e) {			
				if (!GeoKBD.browser.isIe) {
					GeoKBD.event.attach(this.document, 'keypress', __keypress, true);
					GeoKBD.event.detach(this, 'focus', __focus, true);
				} else {
					GeoKBD.event.attach(this.contentWindow.document, 'keypress', __keypress, true);
					this.onfocus = null;
				}
			};
			
			var interval = window.setInterval(function() {
				var el = typeof iframe=='string' ? document.getElementById(iframe) : iframe();
				if (el) {
					for (var p = el.parentNode; p && p != document.body; p = p.parentNode) {
						if (/form/i.test(p.tagName)) {
							if (el.contentWindow.document) {
								el.contentWindow.document.parentForm = p.name || p.id;
							} else {
								el.document.parentForm = p.name || p.id;
							}
							break;
						}
					}
					if (!GeoKBD.browser.isIe) {		
						GeoKBD.event.attach(el.contentWindow, 'focus', __focus, true);
					} else {
						el.onfocus = __focus;
					}
					el = null;
					window.clearInterval(interval);
				}
			}, 100);
			
		}
		
	};
	
	window.GeoKBD = GeoKBD;

})();
