if (typeof($) != 'undefined'){ var msie = $.browser.msie;
var old = $.browser.version.substr(0,1)<"8";
}else{var msie=true; var old = true; }function getGetVar(url, varname){
	var GETDATA = new Array();
	var tmp = url.split("?");
	var sGet = tmp[1];
	if (sGet){
		sGet = sGet.substr(1);
		var sNVPairs = sGet.split("&");
		for (var i = 0; i < sNVPairs.length; i++){
			var sNV = sNVPairs[i].split("=");
			GETDATA[sNV[0]] = sNV[1];
		}
	}
	return GETDATA[varname];
}


function substr_replace (str, replace, start, length) {
    if (start < 0) { // start position in str
        start = start + str.length;
    }
    length = length !== undefined ? length : str.length;
    if (length < 0) {
        length = length + str.length - start;
    }
    return str.slice(0, start)+replace.substr(0, length)+replace.slice(length)+str.slice(start+length);
}
if( CtrlAjax == undefined ){
	var CtrlAjax = {
		
		silent_reload: false,
		tmp_selector: 1,
		beforeChangeStateCallbacks: {},
		loadCallbacks: {},
		globalLoadCallbacks: {},
		
		addLoadCallback:function( source, callback ){
			CtrlAjax.loadCallbacks[source] = callback;
		},
		
		addGlobalLoadCallback:function(  callback, selector ){
			if(selector == undefined || !selector){
				selector = CtrlAjax.tmp_selector;
				CtrlAjax.tmp_selector++;
			}
			CtrlAjax.globalLoadCallbacks[selector] =  callback;
		},
		
		addBeaforeChangeStateCallback:function( source, callback ){
			CtrlAjax.beforeChangeStateCallbacks[source] = callback;
		},
		
		
		addShadow:function(cont){
			if(cont.find(".ctrl-shadow").length == 0 ){
				var shadow = $('<div class="ctrl-shadow"></div>');
				var width = cont.width();
				if( width != null )
					shadow.width(width);
				var height = cont.height();
				if( height != null )
					shadow.height(height);
				
				shadow.hide();
				cont.append( shadow );
				shadow.fadeIn();
			}
		},
		
		getAjaxId: function(node){
			var ajax = $(node).parents(".ctrl-ajax").eq(0);
			if(!ajax){
				return null;
			}
			var ajaxId = ajax.attr("class").replace("ctrl-ajax ", "").replace("ctrl-ajax-", "");
			
			return ajaxId;
		},
		
		parse:function(container){
			if(window.Page)
				Page.parseHtml(container);
			
			for(selector in CtrlAjax.loadCallbacks)
				CtrlAjax.loadCallbacks[selector]( container );
			
			for(selector in CtrlAjax.globalLoadCallbacks){
				try{
					CtrlAjax.globalLoadCallbacks[selector]( container, selector );
				}catch(ex){//todo
					
				}
			}			
		},
		
		applyEvents:function(selector,cont){
			if(window.Page)
				Page.parseHtml($(".ctrl-ajax-" +selector));
			if( CtrlAjax.loadCallbacks[selector] != undefined )
				CtrlAjax.loadCallbacks[selector]( cont );
			
			for(selector in CtrlAjax.globalLoadCallbacks){
				try{
					CtrlAjax.globalLoadCallbacks[selector]( cont, selector );
				}catch(ex){//todo
					
				}
			}
		},
		
		changeState:function( source, changeStateLink, getVars, callback){
			var cont = $(".ctrl-ajax-" +source);
			
			
			if (typeof( source ) != 'string')
				source = CtrlAjax.getAjaxId(source);
			
			if(CtrlAjax.silent_reload === false)
				CtrlAjax.addShadow(cont);
			if(getVars){
				var query = $.query.load(changeStateLink);
				for(i in getVars)
					query = query.SET(i, getVars[i]);
				changeStateLink = query.toString();
			}
			
			$.get(changeStateLink,{}, function(response){
				if( CtrlAjax.beforeChangeStateCallbacks[source] != undefined )
					CtrlAjax.beforeChangeStateCallbacks[source]( cont );
				
				cont.html(response);
				
				CtrlAjax.applyEvents(source,cont);
				
				
				if(callback)
					callback($(".ctrl-ajax-" +source));
				
			}, "text");
		},
		reload:function(source, callback){
			if (typeof( source ) != 'string')
				source = CtrlAjax.getAjaxId(source);
			
			var cont = $(".ctrl-ajax-" +source);
			var currState = cont.children(".ctrl-current-state", cont).val();
			if( currState == undefined )
				alert("Brak stanu obiektu" + ".ctrl-ajax-" +source);
			else
				CtrlAjax.changeState( source, currState, {}, callback );
		},
		
		changeStateVars:function(source, vars, getVars, callback){
			
			if (typeof( source ) != 'string')
				source = CtrlAjax.getAjaxId(source);
			
			var cont = $(".ctrl-ajax-" + source);
			var states = $(".ctrl-current-state", cont);
			var currState = states.eq(states.length-1).val();
			if(currState == undefined){
				alert(cont.html());
				alert("Read controll state error ["+source+"], [" + ".ctrl-ajax-" + source+"]");
				return false;
			}
			
			var controlVar = getGetVar(currState, "ctrlstate" );
			if(controlVar == undefined) controlVar = "";
			var controlId = getGetVar(currState, "ctrl-ctrlGlobalId" );
			var state = CtrlAjax.unserialize(controlVar);
			if(state[controlId] == undefined){
				state[controlId] = new Array();
			}
			for(key in vars)
				state[controlId][key] = (vars[key]);
			
			
			var serialized = CtrlAjax.serialize(state);
			if(controlVar != "")
				var newState = currState.replace("ctrlstate="+controlVar, "ctrlstate="+serialized);
			else
				var newState = currState + "&ctrlstate="+serialized;
			
			CtrlAjax.changeState( source, newState, getVars, callback );
		},
		
		changeStateVar:function(source, varName, value, callback ){
			
			if (typeof( source ) != 'string')
				source = CtrlAjax.getAjaxId(source);
			
			var cont = $(".ctrl-ajax-" +source);
			var states = $(".ctrl-current-state", cont);
			var currState = states.eq(states.length-1).val();
			var controlVar = getGetVar(currState, "ctrlstate" );
			if(controlVar == undefined) controlVar = "";
			var controlId = getGetVar(currState, "ctrl-ctrlGlobalId" );
			var state = CtrlAjax.unserialize(controlVar);
			if(state[controlId] == undefined){
				state[controlId] = new Array();
			}
			state[controlId][varName] = (value);
			
			var serialized = CtrlAjax.serialize(state);
			var newState = currState.replace("ctrlstate="+controlVar, "ctrlstate="+serialized);
			
			CtrlAjax.changeState( source, newState, callback );
		},
		
		getStateVar:function(source, varName){
			if (typeof( source ) != 'string')
				source = CtrlAjax.getAjaxId(source);
			var cont = $(".ctrl-ajax-" +source);
			var currState = $(".ctrl-current-state", cont).val();
			var controlVar = getGetVar(currState, "ctrlstate" );
			var controlId = getGetVar(currState, "ctrl-ctrlGlobalId" );
			var state = CtrlAjax.unserialize(controlVar);
			if(!state[controlId])
				state[controlId] = new Array()
			return state[controlId][varName];
			
		},
		unserialize:function( string){
			var data = new Array();
			var main = string.split("||");
			for(var i=1;i<main.length;i+=2){
				var local = main[i+1].split("|");
				data[main[i]] = new Array();
				for( var j=0;j<local.length;j+=2){
					data[main[i]][local[j]] = local[j+1];
				} 			
			}
			return data;
		},
		
		serialize:function(data){
			var str = "";
			for( i in data ){
				str+="||"+i+"|";
				for( j in data[i] ){
					str+="|"+j+"|" + data[i][j];
				}
			}
			return str;
		},
		doAction:function(disable, model,action,key, data, callback, addData){
			CtrlAjax.addShadow($(disable));
			
			var sendData = {};
			for(i in data)
				sendData["data["+i+"]"] = data[i];
			
			if(addData){
				for(i in addData)
					sendData[i]= addData[i];
			}
			ArrowDataConnector.execute({
				url: 'index.php?arrowDataRequest=8&action='+action+'&key='+key+'&model='+ model,
				params: sendData,
				callback: function(response){ if(callback){ callback(response); } $(".ctrl-shadow", disable).remove(); }
			});
			 
		},
		registerEvent:function(source, on, eventType ){
			alert("event");
		},
		event:function(source, on, args){
			alert("event");
		}
		
	}
	
	function ctrlInitArrowCtrlAjax(context, selector){};
}
var ctrlInitFunction = function(context, selector){
if(context == false) context = $(document);
ctrlInitArrowCtrlAjax(context, '', []);
};
if (msie && old)
	 $(function(){ctrlInitFunction('');});
 else{ctrlInitFunction('');}
CtrlAjax.addGlobalLoadCallback(ctrlInitFunction, '');
function ctrlInitArrowFormAjax(maincontext,selector, data){
	
	var form = $(selector).parents("form").eq(0);
	
	//arrowmet for ajax json error array
	
	function getFullName(name, namespace){
		if(namespace != "0")
			name =  namespace + '['+ name +']';
		return name;
	}
	
	function addError(name,error, targetNode){
		var namespace = error.namespace;
		var _alert = error.alert;
		name = getFullName(name,namespace);
		var node = form.find('[name="' + name + '"]' );
		if(targetNode){
			
			var targetName = targetNode.attr("name");
			if(name != targetName)
				return false;
		}
		if(!node.is(".ctrl-form-field-error")){
			node.addClass( 'ctrl-form-field-error' );
			node.after(
				$('<div class="ctrl-form-field-error-text">'+_alert+'</div>')
			);
		}
	}
	
	$('input[type="text"],select,textarea', form).blur(function(){
		
		var input = $(this);
		form.ajaxSubmit({
			url: $(form).attr("action") + "&arrowmet=1&arrowValidateOnly=1",
			beforeSerialize: function(){
				form.find( '[hint]' ).each(function(){
					if($(this).val() == $(this).attr("hint")){
						$(this).val("");
						$(this).removeClass("ctrl-hint");
					}
				});
				if(data.beforeSerialize)
					window[data.beforeSerialize](false);
			},
			beforeSubmit:function(){
				form.find( '[hint]' ).each(function(){
					if($(this).val() == ""){
						$(this).val($(this).attr("hint"));
						$(this).addClass("ctrl-hint");
					}
				});
				
			    if(window[data.beforeSubmit]){
				var result = window[data.beforeSubmit](false);
				return result;
			    }
				
				
			},
			
			success:function(responseText, statusText, xhr, $form){
				var obj = eval(responseText);
				
				$(".ctrl-form-field-error",form).each(function(){
					var currName = $(this).attr("name");
					var removeError = true;
					for(i in obj.error.errors){
						 if( currName == getFullName(i,obj.error.errors[i].namespace))
							 removeError = false;
					}
					if(removeError){
						$(this).next(".ctrl-form-field-error-text").remove();
						$(this).removeClass("ctrl-form-field-error");
					}
					
				});
				
				for(i in obj.error.errors)
					addError(i, obj.error.errors[i], input);
				
				
				
			}
		});
		
		
	});
	
	
	
	form.ajaxForm({
		url: $(form).attr("action") + "&arrowmet=1",
		
		beforeSerialize: function(){
			form.find( '[hint]' ).each(function(){
				if($(this).val() == $(this).attr("hint")){
					$(this).val("");
					$(this).removeClass("ctrl-hint");
				}
			});
			if(data.beforeSerialize)
				window[data.beforeSerialize](true);
		},
		beforeSubmit:function(){
			form.find( '[hint]' ).each(function(){
				if($(this).val() == ""){
					$(this).val($(this).attr("hint"));
					$(this).addClass("ctrl-hint");
				}
			});
			
			if(window[data.beforeSubmit]){
			    var result = window[data.beforeSubmit](true);
			    return result;
			}
			    
			var shadow = $('<div class="ctrl-form-shadow"></div>').css({
					position: 'absolute',
					'z-index': '9999',
					'width': form.width(),
					'height': form.height(),
					'top': form.offset().top,
					'left': form.offset().left,
					'background-color': 'grey',
					'opacity': 0.2,
					'border-radius': '5px'
				    });
				    $('body').append(shadow);
			
		},
		success:function(responseText, statusText, xhr, $form){
			$('.ctrl-form-shadow').remove();
			if(data.debugTarget)
				$(data.debugTarget).text( ""+  responseText);
			
			var obj = eval(responseText);
			if(obj == undefined)
				alert('ArrowFormAjax:: Nieprawidłowa odpowiedź serwera.');
			
			$(".ctrl-form-field-error-text",form).remove();
			$(".ctrl-form-field-error",form).removeClass("ctrl-form-field-error");
			
			if(obj.error){
				
				for(i in obj.error.errors)
					addError(i, obj.error.errors[i]);
				
				if(data.error)
					window[data.error](form, obj.error);
				
			}else{
				if(data.success)
					window[data.success](form);
				
				if(data.target && data.targetText)
					$(data.target).html(data.targetText);
			}
			
		}
    }); 
		
	
}
var ctrlInitFunction = function(context, selector){
if(context == false) context = $(document);
ctrlInitArrowFormAjax(context, '#ctrl-ajax-form-location-3ArrowFormAjax', {"target":"#form-newsletter","targetText":"\r\n\t\t\t<p id=\"newsletter-comm\" style=\"width: 320px;\"><b>Dzi\u0119kujemy za u\u017cycie newslettera<\/b><\/p>\r\n\t\t    ","beforeSubmit":"newsletterBeforeSubmit","success":"newsletterSubmit","error":"newsletterError","debugTarget":null,"beforeSerialize":null});
};
if (msie && old)
	 $(function(){ctrlInitFunction('');});
 else{ctrlInitFunction('');}
CtrlAjax.addGlobalLoadCallback(ctrlInitFunction, '#ctrl-ajax-form-location-3ArrowFormAjax');
var ctrlInitFunction = function(context, selector){
if(context == false) context = $(document);
ctrlInitArrowFormAjax(context, '#ctrl-ajax-form-location-15ArrowFormAjax', {"target":".inner-form","targetText":"\r\n\t\t\t\t\t<div id=\"contact-comm\">Dzi\u0119kujemy<\/div>\r\n\t\t\t\t    ","beforeSubmit":null,"success":"success","error":null,"debugTarget":null,"beforeSerialize":null});
};
if (msie && old)
	 $(function(){ctrlInitFunction('');});
 else{ctrlInitFunction('');}
CtrlAjax.addGlobalLoadCallback(ctrlInitFunction, '#ctrl-ajax-form-location-15ArrowFormAjax');

