/**
 * Fix for IE
 */
if(!Array.indexOf){
	Array.prototype.indexOf = function(obj){
		for(var i=0; i<this.length; i++){
			if(this[i] == obj){
				return i;
			}
		}
		return -1;
	};
}

try 
{
	document.execCommand("BackgroundImageCache", false, true);
} catch (e) {  }

var pingPongInterval = null;
var EUR_EEK_COURSE = 15.6466;
var onLoadEvents = {};
var onUnloadEvents = {};
var navigateBack = false;
var leftSeconds = false;
var NextMenu = null;
var NextMenuLink = null;
var arrNextMenuNodes = [];

window.onload = function (){
	for (var i in window.onLoadEvents){
		if ('fn_' == i.substring(0, 3))
			window.onLoadEvents[i]();
	}
};

window.unonload = function (){
	for (var i in window.onUnloadEvents){
		if ('fn_' == i.substring(0, 3))
			window.onUnloadEvents[i]();
	}
};

var stopPingPong = function(){
	clearInterval(window.pingPongInterval);
};

var doPingPong = function(){
	var callback = function(response){
		var objResponse = utils.evalResponse(response);
		if(null == objResponse || !objResponse.success){
			showTransparentLayer("Error processing server response!", null, true);
		}
	};
	utils.makeRequest(requestURL, callback, "action=pingPong");
};

var startPingPong = function(){
	window.pingPongInterval = setInterval(doPingPong, 120000);
	window.onUnloadEvents.fn_stopPingPong = stopPingPong;
};
/**
 * Object that holds all messages used in the project
 **/
var messagesBundle = {
	messagesList : {},
	add : function (key, message, force){
		var success = false;
		if ('undefined' == typeof(this.messagesList[key]) || true === force){
			this.messagesList[key] = message;
			success = true;
		}
		return success;
	},
	get : function (key){
		var message = false;
		if ('undefined' != typeof(this.messagesList[key])){
			message = this.messagesList[key];
		}
		return message;
	},
	remove : function (key){
		var success = false;
		if ('undefined' != typeof(this.messagesList[key])){
			delete this.messagesList[key];
			success = true;
		}
		return success;
	},
	empty : function (){
		delete this.messagesList;
		this.messagesList = {};
	}
};

var utils ={
	opacityType : false,
	number_format : function (integer){
		var number 	= parseInt(integer, 10);
		var string 	= integer.toString();
		var parts		= string.split('.');
		var p_len		= parts[0].length;
		var ret			= new Array();
		
		if (parts[1])
			parts[1] = parts[1].toString().substring(0, 2);
		else
			parts[1] = '00';
		
		for (var x = p_len ; x > 0 ; x--)
			if (0 == (p_len - x + 1) % 3 && 1 != x)
				ret[x - 1] = ',' + parts[0].charAt(x - 1);
			else
				ret[x - 1] = parts[0].charAt(x - 1);
				
		if (1 == parts[1].length)
			parts[1] += '0';
		
		return ret.join('') + '.' + parts[1];
	},
	setVal : function (ID, val){
		document.getElementById(ID).value = val;
	},
	findPos : function (obj){
		var curleft = curtop = 0;
		if (obj.offsetParent){
			do{
				curleft += obj.offsetLeft;
				curtop 	+= obj.offsetTop;
			}
			while (obj = obj.offsetParent);
			
			return {'x' : curleft, 'y' : curtop};
		}
	},
	elementsByClass : function (cls, tag, elm){
		if (!tag) tag = '*';
		if (!elm) elm = document;
		
		var retnode = [];
		var myclass = new RegExp('\\b' + cls + '\\b');
		var elem 		= elm.getElementsByTagName(tag);
		
		for (var i = 0 ; i < elem.length ; i++){
			var classes = elem[i].className;
			
			if (myclass.test(classes)){
				retnode.push(elem[i]);
			}
		}
		
		return retnode;
	},
	handleDefaultVal : function (elm, cond){
		if (!cond) cond = 0;
		switch (cond){
			case 0: if (elm.defaultValue == elm.value) elm.value = ''; break;
			case 1: if ('' == elm.value) elm.value = elm.defaultValue; break;
		}
	},
	getSize : function (elm){
		return {'w' : elm.offsetWidth, 'h' : elm.offsetHeight};
	},
	getViewPortSize : function (){
		return {'w' : document.documentElement.clientWidth, 'h' : document.documentElement.clientHeight};
	},
	getDocumentSize : function (windowObj){
		if (!windowObj)windowObj = window;
		var bodyWidth = windowObj.document.getElementsByTagName("body")[0]['offsetWidth'];
		var width = windowObj.document.documentElement['clientWidth'];
		if (bodyWidth > width){
			width = bodyWidth;
		}
		var height = windowObj.document.documentElement.scrollHeight || windowObj.document.documentElement.offsetHeight;
		return {'w' : width, 'h' : height};
	},
	changeOpacity : function (opacity, ID, passedObject){
		var obj = null;
		if (passedObject){
			obj = ID;
		}
		else{
			obj = document.getElementById(ID);
		}
		if (obj){
			if (!this.opacityType){
				this.getOpacityType();
			}
			if (this.opacityType == "filter"){
				var oAlpha = obj.filters['DXImageTransform.Microsoft.alpha'] || obj.filters.alpha;
				if (oAlpha){
					oAlpha.opacity = opacity;
				}
				else{
					obj.style.filter += "progid:DXImageTransform.Microsoft.Alpha(style=0, opacity=" + opacity + ", FinishOpacity=" + opacity + ")";
				}
			}
			else{
				obj.style[this.opacityType] = opacity / 100;
			}
		}
	},
	getOpacityType : function (){
		this.opacityType = false;
		if (typeof(document.body.style.opacity) == 'string') // CSS3 compliant (Moz 1.7+, Safari 1.2+, Opera 9, 10)
			this.opacityType = 'opacity';
		else if (typeof(document.body.style.MozOpacity) == 'string') // Mozilla 1.6 && less, Firefox 0.8
			this.opacityType = 'MozOpacity';
		else if (typeof(document.body.style.KhtmlOpacity) == 'string') // Konqueror 3.1, Safari 1.1
			this.opacityType = 'KhtmlOpacity';
		else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1] >= 5.5)// Internet Exploder 5.5+
			this.opacityType =  'filter';
	},
	paramsToString : function (obj){
		var retStr = '';
		for (var x in obj){
			retStr += (('' == retStr) ? '' : '&') + x + '=' + obj[x];
		}
		return retStr;
	},
	makeRequest : function(ajaxRequestURL, responseCallback, parameters){
		var ajaxRequestResource = null;
		try{
			ajaxRequestResource = new XMLHttpRequest();
		}
		catch(microsoft){
			try{
				ajaxRequestResource = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(err){
				ajaxRequestResource = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		
		if(ajaxRequestResource == null){
			showTransparentLayer("XmlHttpRequest failure", null, true);
		}
		else{
			var postParameters = "";
			if ("string" != typeof(parameters)){
				postParameters = utils.paramsToString(parameters);
			}
			else{
				postParameters = parameters;
			}
			postParameters += (postParameters? "&" : "") + "ajax=true&rnd=" + (new Date()).getTime();
			ajaxRequestResource.open("POST", ajaxRequestURL, true);
			ajaxRequestResource.setRequestHeader("X-Requested-With", "XMLHttpRequest");
			ajaxRequestResource.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			ajaxRequestResource.setRequestHeader("Content-length", postParameters.length);
			ajaxRequestResource.setRequestHeader("Connection", "close");
			
			ajaxRequestResource.onreadystatechange = function() {
				if(ajaxRequestResource.readyState == 4 && ajaxRequestResource.status == 200){
					if (responseCallback && responseCallback.call){
						responseCallback(ajaxRequestResource.responseText, ajaxRequestResource);
					}
				}
				else if (ajaxRequestResource.readyState == 4 && ajaxRequestResource.status && ajaxRequestResource.status != 200){
					showTransparentLayer("Error processing request! Error status - " + ajaxRequestResource.status, null, true);
				}
			};
			ajaxRequestResource.send(postParameters); 
		}
	},
	evalResponse : function (response){
		var data = null;
		try{
			data = eval(response);
		}
		catch(error){}
		return data;
	},
	/**
	 * Checks element for class presence and add provided class name if not found
	 */
	addClass : function(element, className){
		if ("string" == typeof(element)){
			element = document.getElementById(element);
		}
		if (element){
			var elementClassName = element.className + "";
			if (-1 == elementClassName.indexOf(className)){
				element.className += " " + className;
			}
		}
	},
	/**
	 * Checks element for class presence and removes provided class name if found
	 */
	removeClass : function(element, className){
		if ("string" == typeof(element)){
			element = document.getElementById(element);
		}
		if (element){
			var elementClassName = element.className + "";
			if (-1 != elementClassName.indexOf(className)){
				if (-1 != elementClassName.indexOf(className + " ")){
					className += " ";
				}
				else if(-1 != elementClassName.indexOf(" " + className)){
					className = " " + className;
				}
				elementClassName = elementClassName.replace(className, "");
				element.className = elementClassName;
			}
		}
	}
};
/**
 * Renderer, that renders simplified pictures list on upload finish
 **/
var renderPictures = function(responseData){
	var data = utils.evalResponse(responseData);
	var target = document.getElementById('ordering2_container_pildid');
	pictureHandler.reset();
	if (data && target){
		document.getElementById('loading').style.display = 'none';
		if (data.length){
			document.getElementById('forward').style.display = 'block';
			changeMenuHrefs(true);
			for(var i = data.length - 1; i >= 0; i--){//Reverse pictures list, so last uploaded will be the first one to display
				pictureHandler.addPicture({id: data[i].name, width: data[i].width, height: data[i].height, formatID: data[i].formatID, amount: data[i].amount});
			}
			pictureHandler.renderSimplePicturesList(target);
		}
		else{
			target.innerHTML = "";
			document.getElementById('choosePicturesSign').style.display = 'block';
			document.getElementById('forward').style.display = 'none';
			changeMenuHrefs(false);
		}
	}
};
/**
 * Renderer, that renders pictures selections list
 **/
var renderPicturesSelections = function(responseData){
	var data = utils.evalResponse(responseData);
	var target = document.getElementById('ordering_3_container');
	pictureHandler.reset();
	if (data.length){
		for(var i = data.length - 1; i >= 0; i--){//Reverse pictures list, so last uploaded will be the first one to display
			pictureHandler.addPicture({id: data[i].name, width: data[i].width, height: data[i].height, formatID: data[i].formatID, availableFormats : data[i].availableFormats, amount: data[i].amount, isVertical: data[i].isVertical});
		}
		pictureHandler.renderSelectionsPicturesList(target);
	}
};
/**
 * 
 * @param	{Boolean}	isSimple	true to render simplified view, false to render selections view
 * @return	{Function}				callback that will be called on click
 */
var getDeleteCallback = function(isSimple){
	return function(){deleteSelectedPictures(isSimple);}
};
/**
 * Removes pictures marked for deletetion
 **/
var deleteSelectedPictures = function(renderSimpleList){
	var pictureNames = pictureHandler.getMarkedImageNames();
	var params = "action=deleteImages";
	if (pictureNames && pictureNames.length){
		for(var i = 0; i < pictureNames.length; i++){
			params += "&deleteImages[]=" + pictureNames[i];
		}
		if (renderSimpleList){
			var target = document.getElementById('ordering2_container_pildid');
			if (target){
				target.innerHTML = "";
				document.getElementById('loading').style.display = 'block';
			}
		}
		else{
			var target = document.getElementById('ordering_3_container');
		}
		var callback = function(responseData){
			var data = utils.evalResponse(responseData);
			if (data && data.success){
				pictureHandler.deleteMarkedImages();
				if (renderSimpleList){
					var rendered = pictureHandler.renderSimplePicturesList(target);
					document.getElementById('loading').style.display = 'none';
					if (rendered){
						document.getElementById('forward').style.display = 'block';
						changeMenuHrefs(true);
					}
					else{
						document.getElementById('choosePicturesSign').style.display = 'block';
						document.getElementById('forward').style.display = 'none';
						changeMenuHrefs(false);
					}
				}
				else{
					if (data.paymentInfo){
						pictureHandler.setPriceInfo(data.paymentInfo.picturesPrice, data.paymentInfo.discountPicturesPrice, data.paymentInfo.transportPrice, data.paymentInfo.currency, data.paymentInfo.totalPicturesAmount);
					}
					var rendered = pictureHandler.renderSelectionsPicturesList(target);
					if (!rendered){
						showTransparentLayer(messagesBundle.get('txtNoPictures'), function(){navigateTo(messagesBundle.get('navigateBackLink'));}, true);
					}
				}
			}
		};
		document.getElementById('buttonDeleteHidden').style.display = 'none';
		utils.makeRequest(requestURL, callback, params);
	}
};
/**
 * Enables or disables navigation to next step
 * @param	{Boolean}	enable				true to enable navigation, false to disable
 * @param	{Boolean}	hasWrongPictures	true to display message about removing wrong images on navigation to step 4 from step 3
 */
var changeMenuHrefs = function(enable, hasWrongPictures){
	if (NextMenu && NextMenuLink){
		var targetMenu = document.getElementById('folder' + NextMenu);
		if (enable && targetMenu){
			if (!hasWrongPictures){
				targetMenu.setAttribute('href', NextMenuLink);
			}
			else{
				targetMenu.setAttribute('href', "javascript:showTransparentLayer(messagesBundle.get('txtWrongPicturesDelete'), function(){navigateTo('" + NextMenuLink + "');});");
			}
		}
		else if (!enable && targetMenu){
			targetMenu.setAttribute('href', "javascript:showTransparentLayer(messagesBundle.get('txtMenuMessage'), null ,true);");
		}
		if (arrNextMenuNodes.length){
			for(var i = 0; i < arrNextMenuNodes.length; i++){
				if (arrNextMenuNodes[i].enabled){
					var nextTargetMenu = document.getElementById('folder' + arrNextMenuNodes[i].id);
					if (nextTargetMenu){
						if (enable && !hasWrongPictures){
							nextTargetMenu.setAttribute('href', arrNextMenuNodes[i].url);
						}
						else{
							nextTargetMenu.setAttribute('href', "javascript:showTransparentLayer(messagesBundle.get('txtMenuMessage'), null ,true);");
						}
					}
				}
			}
		}
	}
};
var navigateTo = function(link){
	document.location.href = link;
};

function autoNavigate(url, time){
	showSeconds(time);
	setInterval("showSeconds('" + time + "')", 1000);
	setTimeout("document.location.href='" + url + "'", time);
}

function showSeconds(time){
	var target = document.getElementById('secondsLeft');
	var SecondsToShow = 0;
		
	if (target)
	{
		if (leftSeconds === false)
			leftSeconds = time;
		else
			leftSeconds = leftSeconds - 1000;
		if (leftSeconds < 0)
			leftSeconds = 0;
		
		SecondsToShow = parseInt(leftSeconds/1000, 10);
		target.innerHTML = SecondsToShow;
	}
}

function clearDefaultValue(elm)
{
  if (elm.defaultValue == elm.value) elm.value = "";
}
function restoreDefaultValue(elm)
{
  if (elm.value == "") elm.value = elm.defaultValue;
}

function setMouseFunctions(target, mainClass)
{
	if (target)
	{
		var SetClassName = "";
		var currentClass = target.className + "";
		var ArrClass = currentClass.split(" ");
		
		if (ArrClass.length > 1)
		{
			for (var i=1; i<ArrClass.length; i++)
			{
				SetClassName = SetClassName + " " + ArrClass[i];
			}
			target.className = mainClass + SetClassName;
		}
		else
		{
			target.className = mainClass;
		}
	}
}

var trim = function(string){
	return new String(string).replace(/(^\s+)|(\s+$)/g, "");
};

var checkOrderContacts = function(){
	var name = document.getElementById('orderUserName');
	var phone = document.getElementById('orderUserPhone');
	var email = document.getElementById('orderUserEmail');
	var address = document.getElementById('orderUserAddress');
	var city = document.getElementById('orderUserCity');
	var index = document.getElementById('orderUserIndex');
	var comment = document.getElementById('orderUserComment');
	
	if (name && phone && email && address && city && index){
		name.value = trim(name.value);
		phone.value = trim(phone.value);
		email.value = trim(email.value);
		address.value = trim(address.value);
		city.value = trim(city.value);
		index.value = trim(index.value);
		if (name.value && phone.value && email.value && address.value && city.value && index.value){
			var callback = function(responseData){
				var data = utils.evalResponse(responseData);
				if (data && data.success){
					navigateTo(NextMenuLink);
				}
				else if(data && data.errors){
					var errorData = "";
					if (data.errors.name){
						errorData += "<div>" + messagesBundle.get("txtNameNotValid") + "</div>";
					}
					if (data.errors.phone){
						errorData += "<div>" + messagesBundle.get("txtPhoneNotValid") + "</div>";
					}
					if (data.errors.email){
						errorData += "<div>" + messagesBundle.get("txtEmailNotValid") + "</div>";
					}
					if (data.errors.address){
						errorData += "<div>" + messagesBundle.get("txtAddressNotValid") + "</div>";
					}
					if (data.errors.city){
						errorData += "<div>" + messagesBundle.get("txtCityNotValid") + "</div>";
					}
					if (data.errors.index){
						errorData += "<div>" + messagesBundle.get("txtPindexNotValid") + "</div>";
					}
					showTransparentLayer(errorData, null, true);
				}
			};
			utils.makeRequest(requestURL, callback, {action: "setUserData", name: encodeURIComponent(name.value), phone: encodeURIComponent(phone.value), email: encodeURIComponent(email.value), address: encodeURIComponent(address.value), city: encodeURIComponent(city.value), index: encodeURIComponent(index.value), comment: encodeURIComponent(comment.value)});
		}
		else{
			showTransparentLayer(messagesBundle.get("txtFillAll"), null, true);
		}
	}
};

function startPayment(ID){
	var form = document.getElementById('paymentForm');
	var target = document.getElementById('bank_id');
	if (form && target && ID > 0 && ID <= 4){
		target.value = ID;
		form.submit();
	}
}

function check_register_values(formID){
	var errorShown = false;
	var Name = document.getElementById('f_name');
	var Phone = document.getElementById('f_phone');
	var Email = document.getElementById('f_email');
	var Address = document.getElementById('f_address');
	var City = document.getElementById('f_city');
	var Pindex = document.getElementById('f_index');
	var UserName = document.getElementById('f_username');
	var UserPassword = document.getElementById('f_password');
	var UserPassword2 = document.getElementById('f_password2');
	var test = false;
	
	if (Name && Phone && Email && Address && City && Pindex && UserName && UserPassword && UserPassword2)
	{
		if (Name.value && Phone.value && Email.value && Address.value && City.value && Pindex.value && UserName.value && UserPassword.value && UserPassword2.value)
		{
			if (!Name.value)
			{
				showTransparentLayer(messagesBundle.get("txtNameNotValid"), null, true);
				errorShown = true;
			}
			
			test = Phone.value.match(/([+0-9]{7,})/gi);
			
			if (!test && !errorShown)
			{
				showTransparentLayer(messagesBundle.get("txtPhoneNotValid"), null, true);
				errorShown = true;
			}
			else
			{
				Phone.value = test[0];
			}
			
			test = Email.value.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,64}\.[a-zA-Z0-9._-]{2,})/gi);
			
			if (!test && !errorShown)
			{
				showTransparentLayer(messagesBundle.get("txtEmailNotValid"), null, true);
				errorShown = true;
			}
			else if (test)
			{
				Email.value = test[0];
			}
			
			if (!Address.value && !errorShown)
			{
				showTransparentLayer(messagesBundle.get("txtAddressNotValid"), null, true);
				errorShown = true;
			}
			
			if (!City.value && !errorShown)
			{
				showTransparentLayer(messagesBundle.get("txtCityNotValid"), null, true);
				errorShown = true;
			}
			
			if (!Pindex.value && !errorShown)
			{
				showTransparentLayer(messagesBundle.get("txtPindexNotValid"), null, true);
				errorShown = true;
			}
			
			test = UserName.value.match(/([a-zA-Z0-9_-]{6,12})/gi);
			
			if (!test && !errorShown)
			{
				showTransparentLayer(messagesBundle.get("txtUserNameNotValid"), null, true);
				errorShown = true;
			}
			else if (test)
			{
				var oldValue = UserName.value;
				UserName.value = test[0];
				if (oldValue != UserName.value && !errorShown)
				{
					showTransparentLayer(messagesBundle.get("txtUserNameTrunkated"), null, true);
					errorShown = true;
				}
			}
			
			if (UserPassword.value == UserPassword2.value)
			{
				test = UserPassword.value.match(/([a-zA-Z0-9_-]{6,12})/gi);
				
				if (!test && !errorShown)
				{
					showTransparentLayer(messagesBundle.get("txtPasswordNotValid"), null, true);
					errorShown = true;
				}
				else if (test)
				{
					var oldValue = UserPassword.value;
					UserPassword.value = test[0];
					if (oldValue != UserPassword.value && !errorShown)
					{
						showTransparentLayer(messagesBundle.get("txtPasswordsTrunkated"), null, true);
						errorShown = true;
						UserPassword.value = "";
						UserPassword2.value = "";
					}
				}
			}
			else
			{
				showTransparentLayer(messagesBundle.get("txtPasswordsNotMatch"), null, true);
				errorShown = true;
			}
			
			if (!errorShown)
			{
				document.forms[formID].submit();
			}
		}
		else
		{
			showTransparentLayer(messagesBundle.get("txtFillAll"), null, true);
		}
	}
}
