// Globals
var result_ok = 1;

/**
* get xml tag
*/
function getXmlTag (xml, tag_name)
{
  return (xml.getElementsByTagName(tag_name)[0].childNodes.length != 0 ?
         xml.getElementsByTagName(tag_name)[0].childNodes[0].nodeValue : "");
}


function isEmailValid(email) 
{
   var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
	if (filter.test(email))
		return true;
	else
		return false;		
}

	
function addSubscriber(email)
{
	// process with the requests
    var params = "email=" + email;
	
	$.ajax({
		url: 'site/core/add_subscriber.php',
		type: 'POST',
		dataType: 'xml',
		data: params,
		error: function(){
			alert('There is a problem occured while processing operation');
		},
		success: function(xml){

			var status 	= getXmlTag(xml, "status");
			var message = getXmlTag(xml, "message");
			
			if(status == result_ok)
			{
				alert(message);
			}
			else { // status != interface_ok
				alert("ERROR: " + message);
			}
		}
	});		
}

function removeSubscriber(email)
{
	// process with the requests
    var params = "email=" + email;
	
	$.ajax({
		url: 'site/core/remove_subscriber.php',
		type: 'POST',
		dataType: 'xml',
		data: params,
		error: function(){
			alert('There is a problem occured while processing operation');
		},
		success: function(xml){

			var status 	= getXmlTag(xml, "status");
			var message = getXmlTag(xml, "message");
			
			if(status == result_ok)
			{
				alert(message);
			}
			else { // status != interface_ok
				alert("ERROR: " + message);
			}
		}
	});		
}


function publishNews(filename, title, news, send_email)
{

	// process with the requests
    var params = 	"filename=" + filename +
					"&title=" + title +
					"&news=" + news + 
					"&send_email=" + send_email;
	
	$.ajax({
		url: 'site/core/publish_news.php',
		type: 'POST',
		dataType: 'xml',
		data: params,
		error: function(){
			alert('There is a problem occured while processing operation');
		},
		success: function(xml){

			var status 	= getXmlTag(xml, "status");
			var message = getXmlTag(xml, "message");
			
			if(status == result_ok)
			{
				alert(message);
			}
			else { // status != interface_ok
				alert("ERROR: " + message);
			}
		}
	});		

}

	
	
function utf8_encode ( argString ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +   improved by: Yves Sucaet
    // +   bugfixed by: Onno Marsman
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    var string = (argString+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n");
 
    var utftext = "";
    var start, end;
    var stringl = 0;
 
    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;
 
        if (c1 < 128) {
            end++;
        } else if (c1 > 127 && c1 < 2048) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc !== null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }
 
    if (end > start) {
        utftext += string.substring(start, string.length);
    }
 
    return utftext;
}
	
function base64_encode (data) {
    // http://kevin.vanzonneveld.net
    // +   original by: Tyler Akins (http://rumkin.com)
    // +   improved by: Bayron Guevara
    // +   improved by: Thunder.m
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Pellentesque Malesuada
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: utf8_encode
    // *     example 1: base64_encode('Kevin van Zonneveld');
    // *     returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
 
    // mozilla has this native
    // - but breaks in 2.0.0.12!
    //if (typeof this.window['atob'] == 'function') {
    //    return atob(data);
    //}
        
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc="", tmp_arr = [];
 
    if (!data) {
        return data;
    }
 
    data = this.utf8_encode(data+'');
    
    do { // pack three octets into four hexets
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);
 
        bits = o1<<16 | o2<<8 | o3;
 
        h1 = bits>>18 & 0x3f;
        h2 = bits>>12 & 0x3f;
        h3 = bits>>6 & 0x3f;
        h4 = bits & 0x3f;
 
        // use hexets to index into b64, and append result to encoded string
        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);
    
    enc = tmp_arr.join('');
    
    switch (data.length % 3) {
        case 1:
            enc = enc.slice(0, -2) + '==';
        break;
        case 2:
            enc = enc.slice(0, -1) + '=';
        break;
    }
 
    return enc;
}


function byteArrayToHex(byteArray) {
  var result = "";
  if (!byteArray)
    return;
  for (var i=0; i<byteArray.length; i++)
    result += ((byteArray[i]<16) ? "0" : "") + byteArray[i].toString(16);

  return result;
}

// This function converts a string containing hexadecimal digits to an 
// array of bytes. The resulting byte array is filled in the order the
// values occur in the string, for example "10FF" --> [16, 255]. This
// function returns an array. 

function hexToByteArray(hexString) {
  var byteArray = [];
  if (hexString.length % 2)             // must have even length
    return;
  if (hexString.indexOf("0x") == 0 || hexString.indexOf("0X") == 0)
    hexString = hexString.substring(2);
  for (var i = 0; i<hexString.length; i += 2) 
    byteArray[Math.floor(i/2)] = parseInt(hexString.slice(i, i+2), 16);
  return byteArray;
}

function byteArrayToString(dataArray)
{
  var res = '';
	for(var i = 0; i < dataArray.length; ++i)
		res += String.fromCharCode(dataArray[i]);
	return res;
}

function stringToByteArray(dataString)
{
  var res = [];
	for(var i = 0; i < dataString.length; ++i)
		res[i] = dataString.charCodeAt(i);
	return res;
}

function hexToString(hexString)
{
  return byteArrayToString(hexToByteArray(hexString));
}

function stringToHex(dataString)
{
  return byteArrayToHex(stringToByteArray(dataString));
}

