/*
 * forms.js
 *
 * Form Functions
 *
 * Emre Erkmen @ Kırmızı Kalem
 *
 * 2007.09.17
 *
 */

// These four functions are from lightbox package.

function IsNumeric(sText) {
    var ValidChars = "0123456789.";
    var IsNumber = true;
    var Char;


    for (i = 0; i < sText.length && IsNumber == true; i++) {
        Char = sText.charAt(i);
        if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
    return IsNumber;
}


function getPageSize(){

	var xScroll, yScroll;

	if (window.innerHeight && window.scrollMaxY) {
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}

	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}

	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else {
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
	return arrayPageSize;
}

function getPageScroll(){

	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	arrayPageScroll = new Array('',yScroll)
	return arrayPageScroll;
}

function showSelectBoxes(){
	selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "visible";
	}
}

function hideSelectBoxes(){
	selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "hidden";
	}
}

/* Modify the string prototypes so that we have some nice trimming 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+$/,"");
}

var fieldChecker = new Object();

fieldChecker.defs = {
	ALPHACAP: ['[A-ZÜĞŞİÖÇİ ]*', l("VALIDATOR_DESC_ALPHACAP")],
	ALPHA: ['[A-ZÜĞŞİÖÇİa-züğşöçı ]*', l("VALIDATOR_DESC_ALPHA")],
	NUMERIC: ['[0-9 ]*', l("VALIDATOR_DESC_NUMERIC")],
	ALPHANUMERIC: ['[A-ZÜĞŞİÖÇİa-züğşöçı0-9 ]*', l("VALIDATOR_DESC_ALPHANUMERIC")],
	IDENTIFIER: ['[a-zA-ZğüşıöçĞÜŞİÖÇ0-9_\-]*', l("VALIDATOR_DESC_IDENTIFIER")],
	TEXT: ['[A-ZÜĞŞİÖÇİa-züğşöçı0-9\.\*!/\?,;"\')(:&%+\\-\r\n ]*', l("VALIDATOR_DESC_TEXT")],
	EMAIL: ["^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)+$", l("VALIDATOR_DESC_EMAIL")],
	PHONE_CODE: ['[0-9]{3}', l("VALIDATOR_DESC_PHONE_CODE")],
	PHONE_NUMBER: ['[0-9]{7}', l("VALIDATOR_DESC_PHONE_NUMBER")],

	SELECTED: ['SELECTED', l("VALIDATOR_DESC_SELECTED")],
	CHECKED: ['CHECKED', l("VALIDATOR_DESC_CHECKED")]
};

fieldChecker.applyCheckForAllFields = function() {
	// Cache all the fields that needs a check.
	fieldChecker.checkQueue = $$('[class^=check_]');

	// Capitalize
	var elements = $$('.capitalize');
	for (var i=0; i < elements.length; i++) {
		var e=elements[i];
		e.addEvent('keyup', function () {
			this.value = fieldChecker.capitalize(this.value);
		});
		e.addEvent('blur', function () {
			this.value = fieldChecker.capitalize(this.value);
		});
	};

	// Lowerize
	var elements = $$('.lowerize');
	for (var i=0; i < elements.length; i++) {
		var e=elements[i];
		e.addEvent('keyup', function () {
			this.value = fieldChecker.lowerize(this.value);
		});
		e.addEvent('blur', function () {
			this.value = fieldChecker.lowerize(this.value);
		});
	};

	// Apply the relevant function for all checks.
	for (var key in this.defs) {
		var elements = $$('.check_' + key);
		for (var i=0; i < elements.length; i++) {
			var e=elements[i];

			e.check = this.defs[key];
			e.lastCheck = false;

			e.addEvent('blur', function () {
				this.value = this.value.trim();
				if (this.value.length == 0) {
					if (this.hasClass('optional')) {
						fieldChecker.validMessage(this);
						this.lastCheck = true;
						return true;
					} else {
						fieldChecker.errorMessage(this, this.check[1]);
						this.lastCheck = false;
						return false;
					}
				} else if (this.check[0] == 'CHECKED') {
					var allInputsWithThisName = $$('form input[name=' + this.name + ']');
					for (var cIndex = 0, cLength = allInputsWithThisName.length; cIndex < cLength; cIndex++) {
						if (allInputsWithThisName[cIndex].getProperty('checked') == true) {
							fieldChecker.validMessage(this);
							this.lastCheck = true;
							return true;
						};
					};
					fieldChecker.errorMessage(this, this.check[1]);
					this.lastCheck = false;
					return false;
				} else if (this.check[0] == 'SELECTED') {
					if (this.getProperty('selectedIndex') == 0) {
						fieldChecker.errorMessage(this, this.check[1]);
						this.lastCheck = false;
						return false;
					} else {
						fieldChecker.validMessage(this);
						this.lastCheck = true;
						return true;
					};
				} else if (fieldChecker.checkString(this.value, this.check[0])) {
					fieldChecker.validMessage(this);
					this.lastCheck = true;
					return true;
				} else {
					fieldChecker.errorMessage(this, this.check[1]);
					this.lastCheck = false;
					return false;
				}
			});
		};
	};


    /*
	// Override default submit action. From solutoire.com
	$('submitTheForm').addEvent( 'click', function(evt){
		// Stops the submission of the form.
		new Event(evt).stop();

		// Sends the form to its action parameter.
		if (fieldChecker.checkAll()) {
			fieldChecker.submit();
		} else {
			fieldChecker.showAlertBox('user');
		};
	});
	*/

}

fieldChecker.capitalize = function(s) {
	s = s.replace(/ğ/, 'Ğ');
	s = s.replace(/ü/, 'Ü');
	s = s.replace(/ş/, 'Ş');
	s = s.replace(/i/, 'İ');
	s = s.replace(/ı/, 'I');
	s = s.replace(/ö/, 'Ö');
	s = s.replace(/ç/, 'Ç');
	s = s.toUpperCase();
	return s;
}
fieldChecker.lowerize = function(s) {
	s = s.replace(/Ğ/, 'ğ');
	s = s.replace(/Ü/, 'ü');
	s = s.replace(/Ş/, 'ş');
	s = s.replace(/İ/, 'i');
	s = s.replace(/I/, 'ı');
	s = s.replace(/Ö/, 'ö');
	s = s.replace(/Ç/, 'ç');
	s = s.toLowerCase();
	return s;
}

fieldChecker.checkString = function(s, rule) {
	re = new RegExp(rule, 'g');
	m = re.exec(s);
	return m ? (m[0].length == s.length) : false;
}

fieldChecker.errorMessage = function(e, s) {
	var msg = '<div class="fieldError"><span class="error">';
	if (typeof(LANG) != undefined) {
		msg += 'Lütfen bu alanı ' + s + ' şekilde doldurunuz.';
	} else {
		msg += 'Please fill this field ' + s + '.';
	}
	msg += '</span></div>';

	var newEl = new Element('td').setHTML(msg);
	newEl.addClass('hataIkon');

	var n = e.getParent();
	if (n.getTag() == 'li') { n = n.getParent().getParent(); }

	if (n.getNext() == undefined) {
		newEl.injectAfter(n);
	};

	newEl.mBox = newEl.getChildren().getChildren().shift();
	newEl.mBox.setOpacity(.9);

	newEl.addEvent('mouseover', function() {
		this.mBox.setStyle('display', 'block');
	});
	newEl.addEvent('mouseout', function() {
		this.mBox.setStyle('display', 'none');
	});

	n.addClass('hata');
}

fieldChecker.validMessage = function(e) {
	var n = e.getParent();
	if (n.getTag() == 'li') { n = n.getParent().getParent(); }
	var m = n.getNext();

	if (m != undefined) {
		m.remove();
	}
	n.removeClass('hata');
}

fieldChecker.checkAll = function() {
	var allValid = true;

	for (var i=0, l = fieldChecker.checkQueue.length; i < l; i++) {
		fieldChecker.checkQueue[i].fireEvent('blur');
		if (fieldChecker.checkQueue[i].lastCheck == false) {
			allValid = false;
		};
	};

	if (allValid) {
		return true;
	} else {
		return false;
	}
}

fieldChecker.submitSuccess = function(message) {
	if (message.match("Success") == "Success") {
		var lastInsertId = message.match(/[0-9]+/g);
		message = "Success";
	};
	switch (message) {
		case 'Success':
			fieldChecker.hideProgressBox();
			fieldChecker.showSuccess(lastInsertId);
			break;
		case 'MAILERROR. :(':
		case 'DBERROR. :(':
			fieldChecker.showAlertBox('system');
			break;
		default:
			fieldChecker.showAlertBox('user');
			break;
	}
}

fieldChecker.submitFailure = function(message) {
	fieldChecker.showAlertBox('system');
}

fieldChecker.ajaxOptions = {
	method: 'post',
	onSuccess: fieldChecker.submitSuccess,
	onFailure: fieldChecker.submitFailure
};
fieldChecker.ajax = new Ajax("Application/FormProcess.asp", fieldChecker.ajaxOptions);

fieldChecker.submit = function() {
	fieldChecker.showProgressBox()
	$('theForm').send(fieldChecker.ajaxOptions);
}

fieldChecker.showBlanker = function() {
	var b = $('blanker');

	if (!b) {
		var newEl = new Element('div', {'id': 'blanker'});
		var b = newEl.injectInside('page');
		b.hide = function() {$('blanker').setStyle('display', 'none'); }
		b.setOpacity(0);
	};

	arrayPageSize = getPageSize();
	arrayPageScroll = getPageScroll();
	b.setStyles({ display: 'block', width: arrayPageSize[0], height: arrayPageSize[1] });
	var myFx = new Fx.Style(b, 'opacity', {duration: 200}).start(0,.5);
}

fieldChecker.hideBlanker = function() {
	var b = $('blanker');
	var myFx = new Fx.Style(b, 'opacity', {duration: 200, onComplete: function(){$('blanker').hide()}}).start(.5,0);
}

fieldChecker.showProgressBox = function() {
	hideSelectBoxes();
	fieldChecker.showBlanker();

	var p = $('progressBox');

	if (!p) {
		var newEl = new Element('div', {'id': 'progressBox'}).setHTML('<div class="boxIcon"><img src="_img/ajaxLoader.gif"></div><span>' + l("FORM_PROCESSING") + '</span>');
		var p = newEl.injectInside('page');
		p.hide = function() {$('progressBox').setStyle('display', 'none'); }
	};

	arrayPageSize = getPageSize();
	arrayPageScroll = getPageScroll();
	p.setStyles({ display: 'block', top: arrayPageScroll[1] + (arrayPageSize[3] / 3), left: (arrayPageSize[0] / 2) - (p.getStyle('width').toInt() / 2)});
	p.setOpacity(1);
}

fieldChecker.hideProgressBox = function() {
	showSelectBoxes()
	fieldChecker.hideBlanker();

	var p = $('progressBox');
	var a = $('alertBox');

	if (p.getStyle('opacity') > 0) { var myFx = new Fx.Style(p, 'opacity', {duration: 200, onComplete: p.hide}).start(1,0); }
	if (a && a.getStyle('opacity') > 0) { var myFx = new Fx.Style(a, 'opacity', {duration: 200, onComplete: a.hide}).start(1,0); }
}

fieldChecker.showAlertBox = function(type) {
	if (!$('progressBox') || $('blanker').getStyle('opacity') == 0) {
		fieldChecker.showProgressBox();
	}
	var a = $('alertBox');
	var p = $('progressBox');

	if (!a) {
		var newEl = new Element('div', {'id': 'alertBox'}).setHTML('<div class="boxIcon"><img src="_img/ikonHata32x32.gif"></div><span id="alertBoxText"></span><div class="confirm"><a href="javascript:fieldChecker.hideProgressBox()">[ Tamam ]</a></div>');
		var a = newEl.injectInside('page');
		a.hide = function() {$('alertBox').setStyle('display', 'none'); }
	};
	p.setOpacity(0);
	a.setOpacity(1);
	a.setStyle('display', 'block');
	p.setStyle('display', 'block');

	if (type == "user") {
		$('alertBoxText').setText(l("FORM_PROBLEM_USER"));
	} else {
		$('alertBoxText').setText(l("FORM_PROBLEM_SERVER"));
	}

	arrayPageSize = getPageSize();
	arrayPageScroll = getPageScroll();
	a.setStyles({ display: 'block', top: arrayPageScroll[1] + (arrayPageSize[3] / 3), left: (arrayPageSize[0] / 2) - ((a.getStyle('width').toInt() + a.getStyle('paddingLeft').toInt() + a.getStyle('paddingRight').toInt()) / 2)});
}

fieldChecker.showSuccess = function(lastInsertId) {
	if (lastInsertId == null) { lastInsertId = 'Kayıt Yok'; };
	window.location.href = '#';
	if ($('ortaKolonTam') != null) {
		$('ortaKolonTam').innerHTML = $('submitSuccess').innerHTML.replace(/LastInsertId/, lastInsertId);
	} else {
		$('ortaKolon').innerHTML = $('submitSuccess').innerHTML.replace(/LastInsertId/, lastInsertId);
	}
}
