function ArrayHash2()
{
	this.length = 0;
	this.index = new Array();	//maintains a list of all the keys
	this.items = new Array();
	for (var i = 0; i < arguments.length; i += 2) {
		if (typeof(arguments[i + 1]) != 'undefined') {
			this.items[arguments[i]] = arguments[i + 1];
			this.length++;
		}
	}
   
	this.setItem = function(in_key, in_value)
	{	
		var tmp_previous;
		if (typeof(in_value) != 'undefined') {
			if (typeof(this.items[in_key]) == 'undefined') {
				this.length++;
				this.index.push(in_key);
			}
			else {
				tmp_previous = this.items[in_key];
			}

			this.items[in_key] = in_value;
		}
		return tmp_previous;
	}
	
	this.removeItem = function(in_key)
	{
		var tmp_previous;
		if (typeof(this.items[in_key]) != 'undefined') {
			this.length--;
			this.index = jQuery.grep(this.index, function(value) { return value != in_key; });
			var tmp_previous = this.items[in_key];
			delete this.items[in_key];
		}
	   
		return tmp_previous;
	}
	
	this.getItem = function(in_key) {
		return this.items[in_key];
	}

	this.hasItem = function(in_key)
	{
		return typeof(this.items[in_key]) != 'undefined';
	}
	
	this.clear = function()
	{
		for (var i in this.items) {
			delete this.items[i];
		}

		this.length = 0;
	}
	
	this.rename = function(oldKey, newKey)
	{
		this.items[newKey] = this.items[oldKey];//fix data
		this.removeItem(this.items[oldKey]);
		this.index.push(newKey);//and fix index
		this.index = jQuery.grep(this.index, function(value) { return value != oldKey; });
		
	}
	
	this.getIndex = function()
	{
		return this.index;
	}
	
}

// ======== PAYMENT SCRIPTS ========
//Populate all form input fields with name similar to the id of the element!
//for example when addToForm is called for input with id var1, all hidden form
//inputs with name=var1 will get the same value.

function addToForm(el){
	validate(el); //given the oportunity, validate the field
	$el = jQuery(el);	
	if($el.attr('id') == "amount") //Amount needs to be converted from euros to cents
	{		
		inCents = parseFloat( $el.val().replace(",",".") ) * 100;
		jQuery('input[name="'+$el.attr('id')+'"]').val( inCents );
	}
	else
		jQuery('input[name="'+$el.attr('id')+'"]').val($el.val());
	
}

//set all fields that need validation to false. Validate() is responsible to set them back to true.
var validated = new ArrayHash2();
validated.setItem('Var1', false); //name
validated.setItem('CustomerEmail', false);
validated.setItem('amount', false);

function validate(el){
	$el = jQuery(el);
	$out = jQuery("#validateResponse_"+$el.attr('id'));
	itemValidated = false;
	if($el.attr('id') == "amount"){
		//fix the data a bit
		str = $el.val();
		str = jQuery.trim( str );
		str = str.replace(".", ",");
		index = str.indexOf(",")
		if(index == -1 && str.length > 0 ) str=str+",00";
		else if (index == -1) str=str;
		else if (index == str.length-1 && str.length > 1) str=str+"00";
		else if (index == str.length-2 && str.length > 2) str=str+"0";		
		$el.val(str);
		if( validateAmount(str) ){
			$out.html("<span style='color:green'>✔</span>");
			itemValidated = true;
		}
		else
			$out.html("<span style='color:red;'>Please type an amount in this format, and between 0,01 and 9999,99</span>");
	}
	else if($el.attr('id') == "CustomerEmail"){
		//fix the data a bit
		str = $el.val();
		str = jQuery.trim( str );
		$el.val(str);
		if( validateEmail(str) ){
			$out.html("<span style='color:green'>✔</span>");
			itemValidated = true;
		}
		else
			$out.html("<span style='color:red;'>Please provide a valid email address</span>");
	}
	else if($el.attr('id') == "Var1"){ //name
		//fix the data a bit
		str = $el.val();
		str = jQuery.trim( str );		
		$el.val(str);
		if( validateExists(str) ){
			$out.html("<span style='color:green'>✔</span>");
			itemValidated = true;
		}
		else
			$out.html("<span style='color:red;'>Please provide a valid Name</span>");
	}
	else
		itemValidated = true;
	validated.setItem($el.attr('id') , itemValidated);	
}

function validateAmount(str) {	
	var objRegExp  = /^\d{1,4}(,\d{1,2})?$/
	return objRegExp.test(str);
}
function validateEmail(str) {
	var objRegExp  = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/;
	return objRegExp.test(str);
}
function validateExists(str) {	
	if( str.length > 3 )
		return true;
	return false;
}
   

var PayButtonClicked = false;
function PayClicked(){
	// Check to see if Pay Button has been clicked before
	if (PayButtonClicked)
	{		
		alert ("Transaction already sent.");
		return false;
	}
	else
		PayButtonClicked = true;
	return true;
}

function sendForm($form){

	//find all the items that needed validation, and see if they have been validated!
	items = validated.getIndex();
	for (var i=0; i < items.length; i++)
	{
		validate( jQuery('#'+items[i]) );//or even better, try to validate it again (that helps when fields auto complete!)
		if( !validated.getItem( items[i] ) )
			return false; 
	}
	//generate a random reference number, because we cant do a second request with the same ref number
	jQuery('input[name="merchantRef"]').val( jQuery('input[name="Var1"]').val() +"_"+ new Date().getTime() );
	if( !PayClicked() ) return false;
	$form.submit();
}

// ===== END OF PAYMENT SCRIPTS =====



jQuery(document).ready(function() {
	
	jQuery('#sharedLogin').live('click', function(event){
		var img=jQuery('#sharedLogin');
		var logi=jQuery('#questLogin');
		var code="Bopen"
		jQuery('#loginComp').html(code);
		var offset = img.offset();
		var pos = img.position();
		var topOffset=img.offsetParent().scrollTop();
		jQuery(logi).css('left', pos.left+img.width()+100).css('top', topOffset+pos.top+img.height()-50).css('z-index','10').css('z-index','10').css('display','block').css('position','absolute');
		if(!logi.is(':visible')){
			jQuery('#questLogin').show();
		}
		return false;
	});
	jQuery("#questLogin").bind( "clickoutside", function(event){

	  if(jQuery(event.target).attr('id')!='sharedLogin'){
			jQuery('#questLogin').hide();
		//resizeMain();
	  }
	});
	
		jQuery('.shi').live('click', function(event) {
		var targ=jQuery('#sh_'+jQuery(this).attr('id'));
		if(targ.is(':visible')){
			jQuery('#sh_'+jQuery(this).attr('id')).css('display', 'none');
		}else{
			jQuery('#sh_'+jQuery(this).attr('id')).css('display', '');
		}
	});
	jQuery('.cltd').live('click', function(){
		var nextRow=jQuery(this).parent().next();
		if(nextRow.is(':visible')){
			nextRow.hide();
		}else{
			nextRow.show();
		}
		return false;
	});

});


function loginTo(){
	var comp="Bopen";
	document.getElementById('inlactor').value=comp;
	document.getElementById('recId').value='';
	document.inlineLogin.submit();
	
	/*var xmlString = "<?xml version='1.0' encoding='UTF-8'?>"+
				"<elements>"+
					"<actor>Bopen</actor>"+
					"<unit>Main</unit>"+
					"<action>getSharedRecords</action>"+
				"</elements>";
	var search = new  net.sendThis("main",onGotShared,null,null, null, "POST",xmlString,"text/xml");*/
}

function onGotShared(){
	jQuery("#questLogin").hide();
	var doc=this.req.responseXML;
	var status = doc.getElementsByTagName("status");
	var obj=jQuery("#about_header");//this.obj_reference;
	if(status[0].firstChild.nodeValue=='0'){
		var results = doc.getElementsByTagName("content")[0].firstChild.nodeValue;
		//if (!jQuery("#"+obj.id+"_innerfiles"))
			jQuery(obj).after("<tr id='about_header_innerfiles' class='innerfiles'><td colspan='7' style='padding:0'>"+results+"</td></tr>");
		//else
		//	jQuery(obj).html(results);//+"</td></tr>");
	}
}

function loadSemiShared(comp, status){
	var obj=jQuery("#about_header")
	if(status){
		var iframe = document.getElementById("innerFrame");
		var cont = iframe.contentWindow.document.getElementById('content');
		if(cont){
			if(document.getElementById(comp+'_innerfiles')){
				document.getElementById(comp+'_innerfiles').cells[0].innerHTML=cont.innerHTML;
			}else{
				jQuery(obj).after("<tr id='about_header_innerfiles' class='innerfiles'><td colspan='7' style='padding:0'>"+cont.innerHTML+"</td></tr>");
			}
			var id = cont.getAttribute('recId');
			jQuery('#'+comp).data('data', {logged:'true', id:id});
		}
		jQuery("#questLogin").hide();
	}else{
		jQuery('#'+comp).data('data', {logged:'false', id:'0'});
	}
	
}

