/**
 * @author alexey
 */
//objects initializated forms
var forForms = new Array();
//Print debug form info
var formsDebug = false;

var initf = function(){
	checkRegion();
	//select forms with nedded className
	$$('form.form_validation').each(function(form){
	if(form.attributes['id'])
		var id = form.attributes['id'].value;
	else id = '';
	//Custom validation for defined forms by form id

	   switch(id){
	        case 'formId1':
	               forForms[id] = new Validation(form.id,{stopOnFirst:false, immediate : false});
	        break;
	        default:
	             //standart validation here
	           forForms[id] = new Validation(form,{stopOnFirst:true, immediate : false});
	        break;
	   }
		prepareForm(form);
		if(formsDebug)
			onPreSubmit(form, true);
		Event.observe(form, 'submit', onPreSubmit.bindAsEventListener());
	});
}

function prepareForm(form){
	if(!form.attributes['id'])
		return;
	if(Prototype.Browser.IE)
		var h = document.createElement('<input name="__validation">');
	else
		var h = document.createElement('input');
	h.setAttribute('name', "__validation");	
	if(!formsDebug)
		h.setAttribute('type', 'hidden');
		else 	h.setAttribute('type', 'text');

	form.appendChild(h);
	if(Prototype.Browser.IE)
		var h = document.createElement('<input name="__formid">');
	else
		var h = document.createElement('input');
	h.setAttribute('name', "__formid");
	h.setAttribute('type', 'hidden');
	h.setAttribute('value', form.attributes['id'].value);

	form.appendChild(h);
}

function onPreSubmit( e, noEvent ){
	if(noEvent)
		var form = e;
	else
		var form = Event.element( e );
	var data = {};
	data['formid'] = form.attributes['id'].value;
	data['elements'] = getFormValidationData( form );
	form.elements['__validation'].value = $H(data).toJSON();
	return true;
}

function getFormValidationData(form){
	var result = new Array();
	var elems = form.getElements();
	var index = 0;
	for(var i = 0; i < elems.length; i++)
	{
		if (elems[i].name) {
			result[ index = result.size()] = {};

			result[index]['name'] = elems[i].name;

			if(elems[i].attributes['class'])
				result[index]['class'] = elems[i].attributes['class'].value;
		}
	}
	return result;
}

if(window.addEventListener){ // Mozilla, Netscape, Firefox
	window.addEventListener('load', initf, false);
} else { // IE
	window.attachEvent('onload', initf);
}



function getFormData(form){
	var _formData = new Array();
	$A(Form.getElements(form)).each(function(el)
	{
			_formData[el.name] = GetElementValue(el);
	});
	return _formData;
}

function fillForm(form, data)
{
	$A(Form.getElements(form)).each(function(el)
	{
		if(typeof(data[el.name]) != 'undefined')
		SetElementValue(el, data[el.name]);
	});
}

function SetElementValue(el, newVal)
{
	switch(el.type)
	{
		case 'text':
		case 'select-one':
		case 'select-multiple':
		case 'password':
		case 'hidden':
		case 'button':
		case 'submit':

		if(new String(newVal) != 'null')
		el.value = newVal;
		else el.value = '';
		break;

		case 'radio':
		case 'checkbox':
		if(parseInt(newVal) || newVal)
		el.checked = true;
		break;
		default:

		if(newVal && el.tagName == 'TEXTAREA')
		el.value = newVal;
		break;
	}
}

function GetElementValue(el)
{
	switch(el.type)
	{
		case 'text':
		case 'select-one':
		case 'select-multiple':
		case 'password':
		case 'hidden':
		case 'button':
		case 'submit':

		return el.value;
		break;

		case 'radio':
		case 'checkbox':
			return el.checked;
		break;
		default:

		if(el.tagName == 'TEXTAREA')
			return el.value;
		break;
	}
}

function GetRequest(url, callback, parameters){
	if( typeof( parameters ) == 'undefined' )
		parameters = {};
	document.body.style.cursor = 'wait';
	return new Ajax.Request(url, {
								method: 'post',
								parameters: parameters.parameters,
							onSuccess: function(callback, transport){
								document.body.style.cursor = 'default';
								if(transport.responseText.isJSON())
									callback(transport.responseText.evalJSON(true));
									else { alert('Wrong Answer From Server:\n\n' + transport.responseText); }
							}.bind(null, callback)
						  });
}

function getRegion(){
	var tmp = location.href.split('/');
	if ($A(tmp).size() > 3) {
		tmp = tmp['3'];
		if ($A(new Array('jp', 'am', 'ap', 'eu')).indexOf(tmp) >= 0)
			return tmp;
	}
	return null;
}

function addSelectOption(select, title, value){
	select = $(select);
	var op=document.createElement('option');
	op.value=value;
	op.text=title.unescapeHTML().stripTags();

	if(Prototype.Browser.IE)
		select.add(op);
	else
		select.appendChild(op);
}

function clearSelect( select ){
	select = $( select );
	select.options.length = 0;
}

function checkRegion(change){
	if(getRegion() === null || change)
	{
		window.win = new Window({	className: "alphacube",
	                      		title: "Choose Your Region",
						  		width:500,
						  		resizable: 0,
	     						maximizable: 0,
							    minimizable: 0,
								closable: change,
								takaraCustom:true,
									url: '/home/selectcountry/'
						 });
		//win.setCloseCallback(zz);
		win.showCenter(true);
		win.show();
	} else {
		var countries = new Array();		
		countries['ap'] = 'Asia Pacific';
		countries['eu'] = 'Europe';
		countries['jp'] = 'Japan';
		countries['am'] = 'North and South America';

		$('country').innerHTML = countries[getRegion()];
		
	}
}

//reset file form field
function resetFile( el ){
	el = $(el);
	if(el)
	{
		var el2 = el.cloneNode();
		el.replace(el2);
	}
}


function getXML(url, cbReady){
			var myAjax = new Ajax.Request(
			url,
				{
                onSuccess: function(cbReady, originalRequest){
                    if (originalRequest.status == 200) {
					var xml = originalRequest.responseXML;

					if (typeof(DOMParser) != "undefined") {
						// Mozilla, Firefox, and related browsers
						xml = (new DOMParser()).parseFromString(originalRequest.responseText, "application/xml");
					}
                        else 
                            if (typeof(ActiveXObject) != "undefined") {
						// Internet Explorer.

						var doc = new ActiveXObject("Microsoft.XMLDOM");  // Create an empty document
						doc.loadXML(originalRequest.responseText);            // Parse text into it
						xml = doc;                   // Return it
					}
					cbReady(xml);
				}
			}.curry(cbReady)
		});
}


function insertAfter(new_node, existing_node){
    // if the existing node has a following sibling, insert the current
    // node before it.  otherwise appending it to the parent node
    // will correctly place it just after the existing node.
    
    if (existing_node.nextSibling) {
        // there is a next sibling.  insert before it using the mutual
        // parent's insertBefore() method.
        existing_node.parentNode.insertBefore(new_node, existing_node.nextSibling);
    }
    else {
        // there is no next sibling. append to the end of the parent's
        // node list.
        existing_node.parentNode.appendChild(new_node);
    }
    
} // insertAfter()