<?php
/*
 * Created on 22.08.2007
 *
 * @copyright (c) 2010 animegame.eu
 * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public Licence
 *
 */
/******************************************************************************
* Dieser Skript enthält Funktionen für encodieren und decodieren von Nachrichten
*******************************************************************************
* Autor: Pascal Proksch
* Erstellungsdatum: 22.08.2007
* Zuletzt verändert: 22.08.2007
*******************************************************************************/

function encodeNoHTMLnoBBAlBhed($msg){
	$msg = $msg[1];
	$albhed = array ( 'e' => 'a','p' => 'b','s' => 'c','t' => 'd','i' => 'e','w' => 'f','k' => 'g','n' => 'h','u' => 'i','v' => 'j','g' => 'k','c' => 'l','l' => 'm','r' => 'n','y' => 'o','b' => 'p','x' => 'q','h' => 'r','m' => 's','d' => 't','o' => 'u','f' => 'v','z' => 'w','q' => 'x','a' => 'y','j' => 'z',
					  'E' => 'A','P' => 'B','S' => 'C','T' => 'D','I' => 'E','W' => 'F','K' => 'G','N' => 'H','U' => 'I','V' => 'J','G' => 'K','C' => 'L','L' => 'M','R' => 'N','Y' => 'O','B' => 'P','X' => 'Q','H' => 'R','M' => 'S','D' => 'T','O' => 'U','F' => 'V','Z' => 'W','Q' => 'X','A' => 'Y','J' => 'Z',
					  'ü' => 'ia', 'Ü' => 'Ia', 'ö' => 'ua', 'Ö' => 'Ua', 'ä' => 'ya', 'Ä' => 'Ya', 'ß' => 'cc' 
					);
    $in_html = 0;
    $in_bb_brackets = 0;
	for($i=0;$i<strlen($msg);$i++){
		$str = mb_substr($msg,$i,1,'UTF-8');
		if($albhed[$str] != null && $in_html == 0 && $in_bb_brackets == 0){
			$result .= $albhed[$str];
		} else{
			switch($str){
				case '<':
					$in_html++;
					break;
				case '[':
					$in_bb_brackets++;
					break;
				case ']':
					if($in_bb_brackets > 0){
						$in_bb_brackets--;
					}
					break;
				case '>':
					if($in_html > 0){
						$in_html--;
					}
					break;
			}
			$result .= $str;
		}
	}
	return '[text='.$msg.']'.$result.'[/text]';
}

function decodeNoHTMLNoBBAlBhed($msg){
//	Al Bhed: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
// Deutsch: E P S T I W K N U V G C L R Y B X H M D O F Z Q A J

	$albhed = array ( 'a' => 'e', 'b' => 'p', 'c' => 's', 'd' => 't', 'e' => 'i', 'f' => 'w', 'g' => 'k', 'h' => 'n', 'i' => 'u', 'j' => 'v', 'k' => 'g', 'l' => 'c', 'm' => 'l', 'n' => 'r', 'o' => 'y', 'p' => 'b', 'q' => 'x', 'r' => 'h', 's' => 'm', 't' => 'd', 'u' => 'o', 'v' => 'f', 'w' => 'z', 'x' => 'q', 'y' => 'a', 'z' => 'j',
					  'A' => 'E', 'B' => 'P', 'C' => 'S', 'D' => 'T', 'E' => 'I', 'F' => 'W', 'G' => 'K', 'H' => 'N', 'I' => 'U', 'J' => 'V', 'K' => 'G', 'L' => 'C', 'M' => 'L', 'N' => 'R', 'O' => 'y', 'p' => 'B', 'Q' => 'X', 'R' => 'H', 'S' => 'M', 'T' => 'D', 'U' => 'O', 'V' => 'F', 'W' => 'Z', 'X' => 'Q', 'Y' => 'A', 'Z' => 'J',
);
    $in_html = 0;
    $in_bb_brackets = 0;
	for($i=0;$i<strlen($msg);$i++){
		$str = mb_substr($msg,$i,1,'UTF-8');
		if($albhed[$str] != null && $in_html == 0 && $in_bb_brackets == 0){
			$result .= $albhed[$str];
		} else{
			switch($str){
				case '<':
					$in_html++;
					break;
				case '[':
					$in_bb_brackets++;
					break;
				case ']':
					if($in_bb_brackets > 0){
						$in_bb_brackets--;
					}
					break;
				case '>':
					if($in_html > 0){
						$in_html--;
					}
					break;
			}
			$result .= $str;
		}
	}
	return $result;                     
}

function encodeNoHTMLWithBB($msg){
	// Erstma das albhed-Tag, da dieses sehr speziell ist!
	$msg = preg_replace_callback('#\[albhed](.*?)\[/albhed]#', 'encodeNoHTMLnoBBAlBhed',$msg);
	$convert = bbcode(encodeNoHTMLNoBB($msg));
	return $convert;
}

function encodeNoHTMLNoBB($msg){
	return addslashes(trim(preg_replace(array('/</','/>/'),array('&lt;','&gt;'),$msg)));
}

function encodeImageUrl($url){
	// Das muster nachdem die Bilderlinks bearbeitet werden
	$search = array('#.*[ ]([a-z]+?://){1}(.*?)#','#<#','#>#') ;
	$replace = array('\1\2','&lt;','&lg;') ;
	$url = preg_replace($search,$replace,$url);
	return $url;
}

function decode($msg){
// Falls mal irgendwas schnell eingefuegt werden muss
	$search = array('#:\)#',
								'#:D#',
								'#:d#',
								'#:o#',
								'#:O#',
								'#:P#',
								'#:p#',
								'#;P#',
								'#;p#',
								'#;\)#',
								'#:\(#',
								'#:\'\(#',
								'#:\$#',
								'#\(h\)#',
								'#\(H\)#',
								'#:s#',
								'#:S#',
								'#xD#',
								'#\^\^#',
								'#\*pirate\*#',
								'#\*nerd\*#'
								);
	$replace = array('<img src="pjirc/img/sourire.gif"></img>',
								'<img src="pjirc/img/content.gif"></img>',
								'<img src="pjirc/img/content.gif"></img>',
								'<img src="pjirc/img/OH-1.gif"></img>',
								'<img src="pjirc/img/OH-2.gif"></img>',
								'<img src="pjirc/img/langue.gif"></img>',
								'<img src="pjirc/img/langue.gif"></img>',
								'<img src="pjirc/img/clin-oeuil-langue.gif"></img>',
								'<img src="pjirc/img/clin-oeuil-langue.gif"></img>',
								'<img src="pjirc/img/clin-oeuil.gif"></img>',
								'<img src="pjirc/img/triste.gif"></img>',
								'<img src="pjirc/img/pleure.gif"></img>',
								'<img src="pjirc/img/rouge.gif"></img>',
								'<img src="pjirc/img/cool.gif"></img>',
								'<img src="pjirc/img/cool.gif"></img>',
								'<img src="pjirc/img/roll-eyes.gif"></img>',
								'<img src="pjirc/img/roll-eyes.gif"></img>',
								'<img src="pjirc/img/sams_teeth1.png"></img>',
								'<img src="pjirc/img/sams_hahaha2.gif"></img>',
								'<img src="pjirc/img/pirate.gif"></img>',
								'<img src="pjirc/img/sams_annoying-nerd.png"></img>'
								);
	return preg_replace($search,$replace,$msg);
}

function checkImageUrl($url){
	// Das muster nachdem die Bilderlinks bearbeitet werden
	$search = array('#.*[ ]([a-z]+?://){1}(.*?)#','#<#','#>#') ;
	$replace = array('\1\2','&lt;','&lg;') ;
	$url = preg_replace($search,$replace,$url);

	if(substr($url,0,4) != 'http' && substr($url,0,3) != 'ftp'){ // Gueltige Links beginnen mit http oder ftp
		return 'Kein g&uuml;ltiger Link!';
	}
	$info = @getimagesize($url);
	if($info[0] == NULL || $info[1] == NULL){
		return 'Bild existiert nicht??';
	} else if($info[0] > 75 || $info[1] > 75){
		echo 'Das Bild '.htmlspecialchars($url).' ist zu gross!!->'.$info[0].'x'.$info[1];
	} else{
		return '';
	}
}


function bbcode($messagetext) {
    $search = array('/\[AMP\]/',
					'/\[ADD\]/',
					'#\[url]([a-z]+?://){1}(.*?)\[/url]#',
                    '#\[url](.*?)\[/url\]#',
                    '#\[url=([a-z]+?://){1}(.*?)\](.*?)\[/url]#',
                    '#\[b](.*?)\[/b\]#',
                    '#\[i](.*?)\[/i\]#',
                    '#\[u](.*?)\[/u\]#',
                    '#\[s](.*?)\[/s\]#',
                    '#\[sub](.*?)\[/sub\]#',
                    '#\[sup](.*?)\[/sup\]#',
                    '#\[color=\#?([0-9a-fA-F]{6})\](.*?)\[/color]#',
                    '#\[color=([a-zA-Z]+?)\](.*?)\[/color]#',
                    '#\[text=(.*?)\](.*?)\[/text]#',
                    '#\n#'
                    //'#\[img]([a-z]+?://){1}(.*?)\[/img]#',
                    //'#\[img](.*?)\[/img\]#'
                    ) ;

    $replace = array('&amp;',
					'+',
					'<a href="\1\2">$1$2</a>',
                    '<a href=http://\1\2>\1</a>',
                    '<a href="\1\2">\3</a>',
                    '<b>\1</b>',
                    '<i>\1</i>',
                    '<u>\1</u>',
                    '<s>\1</s>',
                    '<sub>\1</sub>',
                    '<sup>\1</sup>',
                    '<span style="color:#\1">\2</span>',
                    '<span style="color:\1">\2</span>',
                    '<span title="\1">\2</span>',			
                    '<br>'
                    //'<img src="\1\2">',
                    //'<img src="\1\2" />'
                    ) ;
    $messagetext = preg_replace($search, $replace, $messagetext);
    return $messagetext;
}

function debbcode($messagetext){
    $search = array('/&amp;/',
					'/\+/',
                    '#\<a href=\"([a-z]+?://){1}(.*?)\"\>(.*?)\</a\>#',
                    '#\<b\>(.*?)\</b\>#',
                    '#\<i\>(.*?)\</i\>#',
                    '#\<s\>(.*?)\</s\>#',
                    '#\<u\>(.*?)\</u\>#',
                    '#\<sub\>(.*?)\</sub\>#',
                    '#\<sup\>(.*?)\</sup\>#',
                    '#\<span style="color:\#?([0-9a-fA-F]{6})"\>(.*?)</span\>#',
                    '#\<span style="color:([a-zA-Z]+?)"\>(.*?)</span\>#',
                    '#<br>#'
                    //'<img src="\1\2">',
                    //'<img src="\1\2" />'
                    ) ;


    $replace = array('[AMP]',
					'[ADD]',
                    '[url=\1\2]\3[/url]',
                    '[b]\1[/b]',
                    '[i]\1[/i]',
                    '[s]\1[/s]',
                    '[u]\1[/u]',
                    '[sub]\1[/sub]',
                    '[sup]\1[/sup]',
                    '[color=#\1]\2[/color]',
                    '[color=\1]\2[/color]',
                    "\n"
                    //'#\[img]([a-z]+?://){1}(.*?)\[/img]#',
                    //'#\[img](.*?)\[/img\]#'
                    ) ;

    $messagetext = preg_replace($search, $replace, $messagetext);
    return $messagetext;
}

function validateInteger($value, $default){
	return is_numeric($value)?$value:$default;
}

function validateIntegerArray($value, $default){
	for($i=0,$n=count($value);$i<$n;$i++){
		$value[$i] = validateInteger($value[$i], $default);
	}
	return $value;
}

function validateUnsignedInteger($value, $default){
	return !is_numeric($value)||$value<0?$default:$value;
}

function validateUnsignedIntegerArray($value, $default){
	for($i=0,$n=count($value);$i<$n;$i++){
		$value[$i] = validateUnsignedInteger($value[$i], $default);
	}
	return $value;
}

function validateString($value){
	return $value != null?encodeNoHTMLNoBB($value):null;
}

function validateStringArray($value){
	for($i=0,$n=count($value);$i<$n;$i++){
		$value[$i] = validateString($value[$i]);
	}
	return $value;	
}

function validateEmailAddress($mail){
	return validateString($mail);	
}

function validateName($name){
	$allowed = "/[^a-z0-9\\040\\-\\_äöü]/i";
	// Beschraenke die Eingabezeichen
	$da_name = trim(addslashes(preg_replace($allowed,'',$name)));	
	if(strlen($da_name) < 2){
		return NULL;
	}
	return $da_name;
}

function validateURL($url){
	$str = validateString($url);
	$pos = strpos($str, 'http://');
	if($str != 'design/bilder/avatare/noavart.gif' && ($pos === false || $pos != 0)){
		return '';
	} else{
		return $str;
	}
}

?>